Собор... Базар... Кошмар...

топ 100 блогов d0ctor-z10.02.2025
Многие люди (особенно те, кто по политическим причинам не доверяет свободным рынкам) ожидают, что культура самостоятельных эгоистов будет фрагментированной, территориальной, расточительной, скрытной и враждебной. (Many people (especially those who politically distrust free markets) would expect a culture of self-directed egoists to be fragmented, territorial, wasteful, secretive, and hostile.)

Эрик Реймонд, "Собор и Базар".

И они совершенно правы. Я считаю так же, но не по политическим причинам - мои убеждения более глубокие, а политические взгляды есть только их следствие. При достижении определенного уровня развития технологий рынки просто перестают работать. Эрик Реймонд - либертарианец и может не верить в закон соответствия производственных отношений характеру и уровню развития производительных сил, но закон от этого работать не перестанет.

Толчком (или, как модно сейчас говорить, "триггером") к написанию этого поста послужила очередная попытка (неудачная, хотя, надо признать, таковыми были не все) использования приложения, разработкой которого я занимаюсь, под Linux. Дальше будет немало технического жаргона, программистской ругани и юмора (нередко черного). Я предупредил.

Считалось, а кое-где и сейчас считается, что Linux очень удобен для программиста. Прямо-таки на голову выше, чем проприетарщина родом из Редмонда. В былинные времена написания текста, из которого взят эпиграф, в старом добром XX веке, наверное, так и было. Я, если что, примерно в это время (рубеж веков и тысячелетий) писал программы и там, и там (и даже запускал их на других ОС, давно канувших в Лету), хоть и не профессионально. Много воды утекло с тех пор, Linux захватил практически всю серверную нишу, Android на основе ядра Linux стал самой популярной системой для смартфонов и планшетов, а год Linux на десктопе так и не наступил. И не наступит.

Сейчас выбор ОС, под которой разрабатывается программа, в общем-то, мало влияет на удобство. Хорошие среды разработки есть и там, и там, компиляторы - тоже (зачастую одни и те же, потому что MinGW). Писать, отлаживать, тестировать все равно, где. И выглядит похоже, другая версия Windows или другой оконный менеджер (или тема) в Linux - это мелочи. Но программу я же пишу не для себя, а для пользователей. В конечном итоге, пусть я и работаю на частную компанию, но оборудование (которое бесполезно без программ) и программы (которые не нужны без оборудования) идут клиентам. Которые профессионалы в своем деле, но в большинстве случаев ничегошеньки не понимают в IT (и это нормально). Им программу надо как-то поставить и запустить. Техподдержка поможет, если что, но она не всесильна.

Под Windows все просто. Я собрал программу под Windows 10 (или 11 - не важно) и могу быть уверен, что она запустится на компьютере пользователя с Windows, начиная с 7 (зависит от используемого фреймворка, конечно - может потребовать и 10). Я даже могу собрать (и регулярно собираю) версию, которая будет работать под XP SP3 и Vista (хотя живого пользователя с Vista я не видел уже очень давно). Сложил все нужные библиотеки в каталог с экзешником, и можно паковать хоть в простой ZIP, хоть в красивый инсталлятор (у нас принято второе), хоть вообще в самораспаковывающийся (незаметно для пользователя) и самозапускающийся архив (так я делал одну мелкую внутреннюю утилиту). Все будет работать. Гарантированно.

Под Linux все намного интереснее. Познакомился с этим я давно, еще в те стародавние времена. Если нужна мне программа есть в дистрибутиве - все легко и просто. Ставим пакет, менеджер пакетов сам доставит нужные зависимости, все работает. Если программы в дистрибутиве нет, ее нужно собрать (или взять, если она интерпретируемая) из исходников. Пара часов сыпящихся градом ошибок, ругани, поиска и выкачивания недостающих пакетов с заголовочными файлами... а дальше - как повезет. Например, может выяснится, что у автора программы была Очень Нужная Библиотека версии 1.0.2, в моем дистрибутиве Linux - 1.0.1, а автор библиотеки при смене версии решил в очередной раз переделать API. Или автор программы использует наиновейший Super-Duper-Bleeding-Edge интерпретатор (обычно Python, с компиляторами C/C++ такого вроде не было) и с более старыми версиями (которые включены в большинство дистрибутивов) программа не работает. Самодействующие эгоисты, да.

Когда появился AppImage, стало намного легче. Пуристы его не любят, а по мне контейнеризация - это практически единственный работающий способ распространения программ для Linux (есть еще статическая линковка, но там слишком много ограничений). Для распространения программы, которую я разрабатываю, я выбрал именно этот способ (не пакеты же под каждый дистрибутив собирать). Но хакеры-эгоисты сломают все! Сломают в смысле, чтобы не работало. Если собрать и упаковать в AppImage программу под новейшим дистрибутивом (даже если это Debian Stable), что вроде бы логично (зачем использовать для разработки старое ПО?), то в других, чуть более старых, дистрибутивах (которых у пользователей полно) программа не запустится. Потому что интерфейс glibc меняют часто, много и с безудержным энтузиазмом, а в AppImage glibc, увы, не пакуется. Поэтому программу для Linux положено собирать под самым старым дистрибутивом из поддерживаемых. В мире Windows аналогией была бы разработка и сборка новейших программ под Windows 7, или вообще XP. В этом месте уровень невменяемости уже подходит к критическому, но все еще хуже...

В новейшим Alt Linux 10.4 AppImage не монтируется и не запускается, потому что гиперактивные хакеры сломали FUSE. В Alt Linux 10.2 по умолчанию вообще нет FUSE. В Ubuntu 20 даже старый AppImage не запустился, потому что "что-то пошло не так" (сообщение в терминале на английском примерно так же информативно, а в GUI просто ничего не происходит). Видимо, надо будет попробовать Flatpack, но все проблемы он не решит. И вы хотите видеть этот цирк на десктопе обычного пользователя?

Понятно, почему серверный сегмент и Android "взлетели". На серверах - контейнеризация (а часто и виртуализация) всего и вся. У меня самого есть домашний сервер на Debian Stable, на котором много всего крутится. Но большинство сервисов - в Docker, а меньшинство (самые распространенные, которые есть везде) - из пакетов дистрибутива. Это моя личная песочница, у серьезных ребят вообще будет Kubernetes. Неважно, какие там библиотеки в дистрибутиве и какой это вообще дистрибутив, лишь бы поддержка и security updates были. В Android полностью свой API для приложений (да, он ужасен, но он хотя бы один), а от Linux остались только ядро и самые глубинные подсистемы, до которых прикладному программисту нет дела (да и доступа к ним тоже нет).

Я могу, по крайней мере, собрать APK c файлами под несколько архитектур (да, там нативный код, не Java), посмотреть на него в эмуляторе (x86), а потом поставить этот APK на китайский планшет (ARM) с Aliexpress с древним Android, причем слегка модифицированным. Программа запустится и будет работать без малейших проблем. Если, конечно, APK удастся собрать, найдя работоспособную комбинацию SDK, NDK, Java и Gradle, потому что шаловливые ручки юных инноваторов непрерывно ломают все, до чего могут дотянуться. Вы такие прогрессивные, креативные и нестандартные? Не то, что раньше, когда скучные инженеры ходили на работу в костюмах, сидели в скучных кабинетах и смотрели в скучные и страшные терминалы? Ну, эти скучные инженеры, например, в 1977 году запустили аппараты Voyager, которые недавно получили обновление ПО "на лету". На расстоянии (для Voyager 1) в более чем полторы сотни астрономических единиц от Земли. А у вас прошлогодние смартфоны при обновлении прошивки превращаются в "кирпичи".

В общем, красивый Базар превратился в обыкновенный базар. С толпами расхваливающих свои товары и орущих продавцов, повсеместным обманом покупателей, руганью, киданием дурно пахнущими субстанциями и иногда случающимся мордобоем. Ожидаемо, потому что тот самый свободный рынок именно такой. Неизбежно. Open source великолепно работает там, где есть стандарты. Описано в RFC? Отлично! Открытая реализация намного лучше проприетарщины. Но хорошая открытая реализация, скорее всего, будет одна. Никакой конкуренции. Если стандарта нет, то все равно будет монополия, потому что при широком использовании нарисуется vendor lock-in, technology lock-in или все сразу. А если нет единства, то нет и широкого использования. Фрагментация безжалостна.

А теперь немножко философии и более далеко идущих выводов. Информационные технологии - пришельцы из следующей формации, капитализм для них - оковы. Причем "классический" капитализм свободного рынка работает для них намного хуже, чем поздний монополистический. Пользователям удобнее, когда существует единый стандарт: интерфейса, обмена данными, вообще всего. Так проще. Разработчикам тоже удобнее, потому что не надо тратить силы и время на поддержку нескольких несовместимых систем. Монополизация естественна и неизбежна. Еще лучше, разумеется, если стандарт не закрытый (и не стандарт только de facto, который нигде не описан), а утвержденный какой-нибудь серьезной общественной организацией, открытый и общедоступный. И ПО не проприетарное, а с открытым кодом, но создаваемое по единому стандарту и плану. И монополия не частная, а общественная. Конкуренция вредна, контрпродуктивна и в конечном итоге все равно умрет. Как и рынок. Тем более, что при выборе лучшего варианта реализации "проигравший" код все равно может пригодится, его можно переиспользовать.

В общем, всякие отраслевые комитеты по стандартизации - хорошо, а ГОСТ - еще лучше! А в перспективе - не ГОСТ, а какой-нибудь Единый Стандарт Солнечной системы. ОС должна быть одна, по крайней мере, в каждом большом сегменте (ладно, серверы, десктопы и смартфоны все-таки отличаются). Дистрибутив должен быть один. Десктопное окружение должно быть одно. Ладно, пусть будут два, чтобы фанбои могли тратить избыток энергии и ходить "стенка на стенку". ЯП... нет, тут под каждую задачу лучше свой. Но по ГОСТу. API как для системы, так и для прикладного ПО принимаются, высекаются станком с ЧПУ на гранитной плите и выставляются перед зданием комитета по стандартизации. Тем, кто предлагает их поломать, выдаются молоток, зубило и карта месторождений гранита.

Помнится, давным-давно существовал принцип демократического централизма. Сейчас он не на слуху, но от этого не устарел ни капельки. Выборность снизу доверху, подотчетность, но обязательность решений вышестоящих органов для нижестоящих. Можно обсуждать, спорить, предлагать свои варианты решений, но если уж приняли - все, извольте выполнять. Хорошие стандарты так и работают, просто надо распространить этот метод на все IT.

Если резюмировать картинками-метафорами...

Вот это безнадежно устарело и работает отвратительно:

Собор... Базар... Кошмар... Trutovsky_002.jpg

Красиво, более-менее надежно и устойчиво, но современным требованиям уже не отвечает:

Собор... Базар... Кошмар... CathedraleNotre-DameDeParis.jpg

Надо что-то такое:

Собор... Базар... Кошмар... Dvorec-sovetov1950.jpg

А в перспективе - вот так:

Собор... Базар... Кошмар... 05.jpg

Оставить комментарий

Архив записей в блогах:
Фотоотчет kalantarov о сегодняшней акции памяти убитого болельщика "Спартака" Егора Свиридова на Водном ...
Для успеха кинофильма его создатели ежедневно проделывают колоссальную работу. Им нужно просчитать все наперед, учесть множество нюансов и связать воедино столько деталей, что кажется, такое даже компьютеру не под силу. Поэтому немудрено, что даже в великие картины порой проникают ...
Ну, в то что маткапитал предназначен для увеличения рождаемости, я думаю, верят только самые наивные, недалёкие и зомбированные телевидением люди. Коих по официальным данным набралось 87 процентов (эл голосование во истину делает чудеса), а по моим ошибочно-оценочным ок 30, что тоже, ...
Онлайн-ритейлер Amazon разработал алгоритм на основе искусственного интеллекта для автоматизации подбора кандидатов на работу, но в итоге отказался от системы из-за дискриминации соискателей-женщин. Еще в 2014 году инженеры Amazon написали искусственный интеллект, который бы смог ...
Сегодня для разнообразия не про языки, хочу поделиться опытом на другую тему, вдруг кому пригодится. Sleeping Bear, by Salty Philip AKA Lynn MacPherson Бессонница – знакомо? Надо ...