Сижу разбираюсь в линуксовых дисплей-серверах. X11 — типичная "переуниверсализация" от слишком умных инженеров из MIT. Мне очень хорошо знаком этот задор и горящие глаза — а давайте сразу всё сделаем ПРАВИЛЬНО! Я и сам этим часто грешил.
В итоге вместо того, чтобы сделать простую и эффективную отрисовку конкретной кнопки, такие программисты предпочтут написать ФРЕЙМВОРК по отрисовке любых кнопок. Всё это проходит под соусом "а вдруг нам понадобится поменять шрифт? а мы такие хоба — и в одном месте конфиг поправим!".
Но у всего есть цена. И кроме потраченных недель или даже месяцев работы, мы платим усложнением всей системы. А ещё возникающими ограничениями, которые программист в азартном порыве ещё в упор не видит. Допустим, программист предусмотрел скруглённые края кнопок и даже сделал настраиваемые параметры скругления. Потом ещё подумал и сделал изменяющийся цвет обводки, и толщину, и тип линии, и настройки пунктира.
А потом через полгода приходит кто-нибудь из маркетинга и говорит "нам надо кнопку в форме звёздочки, дедлайн через неделю — у нас ивент". Звёздочек в фреймворке не заложил, времени "системно" решать нет, поэтому включается костылинг (или не дай бог пойдёт дописывать фреймворк под произвольную форму кнопок). И вот так, под лозунгами "за всё хорошее и против всего плохого" программные продукты превращаются в говно, которое всё дороже сопровождать и невозможно развивать —проще переписать с нуля.
Это кстати как раз про тех "любителей простых, понятных и неправильных решений", только от инженерии. Как бородатые идеологи придумывают универсальные системы управления гражданами (за что потом десятилетиями расплачиваются миллионы людей), так и бородатые инженеры придумывают преждевременные абстракции, универсализации и автоматизации, искренне считая, что это бесплатно. Для их гордыни может и бесплатно, но не для тех, кто будет иметь дело с долгосрочными последствиями.
В общем, Xorg позволяет отрисовывать графический интерфейс универсально: что удалённо, что локально, через сетевой протокол X11. Сама концепция будоражит — это ж так круто, получить remote-управление "из коробки"! Но для локальной работы за это приходится платить ограничениями в наборе команд, ненужной сериализацией и обработкой сетевых пакетов, и как следствие невозможностью нормально задействовать аппаратное ускорение.
В итоге, ради того, чтобы пару раз в год подключиться к удалённому серверу (камон, кто использует GUI на серверах?), миллионы линуксоидов платят за это снижением производительности своих рабочих машин. Тупо греют воздух на никому не нужном абстрагировании и универсализации. Ради красивого прохождения крайне редкого 0.001% сценария, постоянно жертвуют в 99.999% случаев. И это продолжается десятилетиями (протокол утвердили в 1987), просто потому что слишком умные и горделивые инженеры решили сделать идеально. Проскальзывают параллели с любителями "величия за чужой счёт".
В итоге жизнь, конечно, заставила разработчиков написать менее идеальное и великое решение — Wayland. Лёгкий и лаконичный, простой протокол взаимодействия между программами, которые сами отрисовывают своё содержимое, и композитором, который расставляет это содержимое на экране в виде окон. Т.к. всё происходит без сети — работает шустро и прекрасно рендерится на GPU.
Короче, вывод. Не надо быть слишком умным инженером, который предусмотрел ВСЁ в своём Великом Фреймворке. Лучше делать как можно более простые работающие решения и универсализировать их только тогда, когда уже без этого совсем тяжко, и с пониманием цены, которую придётся за это заплатить. Так больше шансов сделать продукт с наименьшей сложностью (complexity) и наименьшими затратами на сопровождение в будущем.
Post #420
9.56K