Совместимость важнее производительности.
(Древняя IT-шная максима)
(Древняя IT-шная максима)
В последнее время я неоднократно сталкивался в Интернете с термином "Платформа Linux". Меня, как практика, очень коробит этот оксюморон. Причем я не одинок в своем мнении. Недавно я встретил аналогичное мнение на одном очень популярном IT-форуме. К сожалению, это мнение не просуществовало долго, так как было высказано в достаточно резкой форме.
Я хочу попытаться убедить тех, кто способен слышать, почему Linux не является платформой. Прежде всего тех, кто принимает решения о выборе этой самой платформы.
Итак, как мы видим из Вики, четкого определения термина "платформа" мы не имеем по сей день. Давайте попытаемся сформулировать, что же мы все-таки понимаем под понятием "платформа" с точки зрения практиков.
Есть аппаратная платформа - совокупность архитектуры центрального процессора, шин, и некоего минимального набора периферии, обеспечивающий выполнение определенных операционных систем и прикладных программ. Например, x86 - это аппаратная платформа.
Есть операционная система, которая выполняется на аппаратной платформе и обеспечивает единую унифицированную среду для выполнения прикладных программ и взаимодействия пользователя с аппаратной платформой (выделено мной). Операционная система представляет собой комбинацию ядра и operational environment, или userland. Помимо этого, ОС имеет оболочку (оболочки), файловые системы, сетевой интерфейс, структуру директорий.
Какими чертами, с точки зрения директора IT, должна обладать платформа, дабы считаться таковой?
- Платформа должна обладать достаточно длительным жизненным циклом (порядка десяти лет) и обеспечивать в течение этого периода возможность выполнения большинства однажды написанных прикладных программ.
- Платформа должна быть стабильной, не меняться непредсказуемым образом в произвольные промежутки времени без веских причин.
- Платформа должна иметь единый API (для сохранения архитектурного единства приложений и единых подходов к разработке) и унифицированный ABI (в случае операционных систем для обеспечения выполнения единожды написанных и скомпилированных приложений без необходимости их перекомпиляции).
- Платформа должна иметь единый административный и прикладной интерфейс. А именно, использовать конечное количество оболочек, обеспечивать единое пространство управления процессами и системами, иметь единый интерфейс установки прикладного ПО и пакетов программ, иметь единый интерфейс управления обновлениями. Кроме этого, иметь единую структуру директорий, с одинаковым месторасположением основных компонентов юзерленда и системных компонентов.
- Платформа имеет достаточно большое сообщество разработчиков и поставщиков прикладных программ, эксплуатируемых на ней.
Замечание. Совсем не каждая операционная система является платформой. KolibriOS - операционная система. Но она - не платформа.
Ранее платформой в общем смысле этого слова неформально считалась совокупность аппаратной платформы и операционной системы.
Это определение остается верным по сей день, однако мы его несколько дополним. Платформой так же является достаточно распространенная единая среда выполнения приложений. Я подчеркиваю - единая. С единым пользовательским и прикладным интерфейсом, единой структурой директорий, пакетов, библиотек, едиными подходами к управлению и администрированию.
В некоторых случаях платформами с натяжкой можно считать различные операционные среды, удовлетворяющие большинству требований к платформам. Например, Java - может считаться платформой, поскольку является средой для выполнения прикладных программ. Такой платформой может считаться даже Perl.
Говоря простым языком - от платформы требуется стабильность, единство и возможность выполнять возможно большее количество прикладных программ. А также возможность, изучив систему один раз, использовать постоянные и воспроизводимые подходы на всех последующих версиях платформы без необходимости переобучения. Использовать, непример, единые скриптовые комплексы на большинстве версий данной платформы. Находить прикладные программы и их данные в одних и тех же местах. И так далее.
Я повторяю, все это означает, что мы рассматриваем платформу с точки зрения департамента IT.
Говоря простым языком, если я планирую построение крупной инфраструктуры критичных систем, работающих в режиме 24х7х365, и при этом планирую минимизировать затраты, (что очень естественно для бизнеса, не правда ли?) я буду выбирать платформу, которая позволит мне, установив оборудование и ОС один раз, с минимальными затратами обновлять и обслуживать их с минимальным простоем, без необходимости обновлять прикладные системы, на протяжении возможно большего промежутка времени. Что, в частности, подразумевает, что, раз обучив системных администраторов, мне не придется потом ежегодно тратиться на их переобучение в связи с кардинальными изменениями платформы. Кроме этого, для сокращения TCO мне желательно для эксплуатации систем использовать минимально квалифицированный персонал уровня операторов, а не дорогостоящих гениев ядерного хака.
Ну и такое простое соображение. Полностью переустановить домашний писюк - это вовсе не то же самое, что и переустановка нескольких тысяч серверов в датацентре, правда?
Однако, несмотря на максиму, вынесенную в заголовок, и которая коротко обобщает все то, что мы только что сформулировали, с единством в компьютерном мире очень туго. Даже, несмотря на титанические усилия, стандарт POSIX обязательным так и не стал. Я сколько себя в компьютерных системах помню, его пытаються разработать и насадить. Безуспешно.
Таким образом, платформами мы можем считать - с точки зрения enterprise и с некоторыми - весьма существенными - натяжками:
- Большинство UNIX-систем
- Несмотря на все недостатки и кривизну - Wintel (Windows + Intel). Большая часть приложений, написанных для Win32 более десяти лет назад, без использования костылей и грязных хаков, посейчас исполняется на современных версиях
- Java
Потому что, как директору IT, лично мне неприемлема ситуация, когда, после обновления ОС, перестает работать большинство моих прикладных программ, за которые плачены деньги или на которые потрачено много времени и усилий и которые использует достаточно большое количество пользователей. Или если требуется обновлять приложения. Переустанавливать их. Так же, как недопустима ситуация необходимости перекомпиляции большинства приложений для обеспечения совместимости с новой версией операционной среды или необходимость переучивания обслуживающего персонала в связи с этим же. Постоянно мутирующая операционная среда платформой не является и являться не может по определению.
Очень хорошо (хотя и достаточно грубо) выразился один мой коллега: "На домашнем десктопе вы можете хоть дрочить вприсядку. На предприятии я хочу один раз установить сервера и выкинуть их через десять лет по причине физического износа оборудования. После того, как они многократно окупятся".
Замечание. Я с ним полностью согласен. Перманентно красноглазить вы можете дома, собирая и пересобирая систему just for fun и наслаждаясь своей немеренной крутизной в сборке ядер и юзерленда, допиливая и перепиливая систему как вам взбрендится, добиваясь того, чтобы какой-то софт работал на вашей персональной платформочке. Причем лично мне даже это глубоко претит. Я не сторонник мастурбационного компьютинга. Я не хочу заниматься со своей ОС на десктопе, ковыряя ее неделями. Я хочу один раз ее поставить, настроить и забыть о ней на несколько лет, пока не придет пора вынужденной ее смены либо оборудование придется выбрасывать.
Говоря простым языком, для платформы недопустимы подходы "Однажды лебедь раком щуку" и "Кому-то нравится поп, кому-то попадья, а кому-то свиной хрящик".
Что мы имеем в случае Linux?
А имеем мы полную доступность всех исходников для каждого и физическую возможность клепать сколько угодно дистрибутивов.
Что на деле означает полную анархию. "Мама-анархия, папа-стакан портвейна".
Сотни "платформочек". По большей части несовместимых на уровне ABI, библиотек, ядер, пакетов и системы патчей. Различных в такой степени, что фактически являющихся несовместимыми друг с другом на большинстве уровней. Инсталляционная база каждой составляет от нескольких сот до нескольких тысяч систем в максимуме. Сами любители анархии постоянно сталкиваются с ситуацией, когда приложение либо несовместимо на уровне пакетного менеджера (что еще хорошо) либо на уровне ABI и просто физически не работает на их платформочке, будучи скомпилированной на другой.
Пример? Пожалуйста - вот он. Обратите внимание - по одной сборке для Windows и Solaris, одна сборка для MacOS и два десятка сборок для Linux.
О чем это говорит? О том, что целевые Linux-дистрибутивы несовместимы между собой. А здесь ведь далеко не все дистры представлены! А лишь самые известные и основные!
И ладно бы, нежизнеспособное само сдохло. И осталась бы пара-тройка устоявшихся платформ, централизованно, предсказуемо и авторитарно развиваемых и поддерживаемых, стандартизированных. Так нет же!
Каждую неделю в среднем рожают один новый дистрибутив. Каждый лепит его по-своему. Создавая сотни несовместимых между собой платформочек. В какой-то момент разработчикам и мэнтайнерам прикладного софта ведь настоиграет собирать и поддерживать десятки и сотни вариантов своих программ. О, вот вам исходники - занимайтесь ими сами.
Хороший подход. Приемлемый для красноглазого мастурбатора дома. И категорически неприемлемый на предприятии.
То, что совместимость идет к черту - это одна сторона медали. Со второй красноглазые еще просто не познакомились. Вымышленный диалог в отделе кадров:
- Здравствуйте, вы системный администратор?
- Да, я системный администратор Linux.
- С каким дистрибутивом вы работаете?
- С дистрибутивом ЛунныйСвет.
- Мы используем КраснуюШапку.
- Простите, я ее не знаю. Даже никогда о ней не слышал.
- Спасибо, вы нам не подходите, до свидания.
Если говорить о безопасности, то дело вообще швах.
Одно дело, когда платформа, оставаясь в большей части неизменной, годами вылизывается в рамках своего жизненного цикла с точки зрения безопасности. В какой-то момент она и становится достаточно безопасной. Но когда платформа меняется постоянно, причем никто не обременяет себя ни secure by design, ни аудитами кода, ни даже сколько-нибудь регулярными обновлениями безопасности - на кой ляд мне такая платформа? Более того - кардинальные изменения вносятся по принципу "шоб було", а создатель дистрибутива обычно в безопасности разбирается как свинья в апельсинах.
Не раз и не два были ситуации, когда публикуется какой-нибудь новый эксплоит. Все пингвинятники дружно начинают его пробовать. "Ой, у меня сработал, ой, и у меня, и у меня тоже, а у меня нет, у меня БСД, ха-ха-ха, так вам и надо!" Далее - по квалификации, либо патчат сами, либо ждут патча, либо, плача и колясь, продолжают есть кактус.
Я не говорю, что закрытый код лучше. Но, например, в случае платформ, централизованно выпускаются обновления безопасности, минимум раз в квартал. Что позволяет достаточно спокойно эксплуатировать системы, находящиеся в публичном доступе.
Швобода, говорите? Бери исходники и пили их сам? Как однажды выразился один мой хороший знакомый - "Банк - это не софтверхаус". Цель департамента IT - не интеллектуальная мастурбация с платформой, а эксплуатация прикладных систем и обеспечение потребностей бизнеса.
Оставим в покое параноидальные мысли об открытых исходниках и закладках. Те, кого это реально беспокоит, могут нанять профессиональную команду и за несколько лет создать собственную ОС с нуля. Если не слабо. И если это реально необходимо.
Да, лицензии и поддержка платформ стоят денег. Но десяток красноглазых
С точки зрения все того же директора IT есть три варианта.
- Послать Linux к чертовой матери и использовать платформу.
- Выбрать один из считанных единиц дистрибутивов, находящийся в одних, достаточно богатых, авторитарных и сильных руках и использовать его, купив официальную поддержку. С натяжкой, такие дистры можно пересчитать по пальцам одной руки. Это будет каким-то подобием платформы.
- Взять в свои руки полный набор исходников, нанять красноглазых хомяков, зажать их в ежовые рукавицы и создать собственный закрытый дистр для собственных надобностей. Поддерживая, развивая и переписывая его собственными силами. И послав в глубокую задницу сообщество с его анархическим подходом. Такой подход по зубам весьма немногим - Google, например. У кого квалифицированных кадров и денег куры не клюют. Будет приватная платформа ПредприятиеLinux.
PS. Соображения, что-де Linux нынче мэйнстрим, меня лично как-то не убеждают. Мэйнстрим - не синоним платформы. Обратите внимание - в основном, к Linux Foundation присоединяются хардверные вендоры, которым нужны дармовые драйверы для обеспечения продаж их железа. Драйверы - они, знаете ли, платформу не определяют. А какая разница, купят железку окошечники или красноглазые пингвинятники? Раз вас так много. Деньги - они не пахнут.
