Взлет и падение FreeBSD

В далёких нулевых годах, когда я только начинал работать с серверными системами, мейнстримом было использование FreeBSD. Более половины серверов под *nix в то время было FreeBSD и другмими BSD. Линукс в качестве серверной системы тогда встречался редко и на него смотрели с опаской. Даже на десктопах линукс считался выбором гиков. Адепты BSD считали только её варианты настощим unix и достойной серверной системой и на "пингвинятников" часто смотрели с большим презрением.

Всё изменилось в последующие годы — доля BSD на серверах уже в 2010-е неуклонно падала и сейчас её почти и не осталось, а если встретишь, то под разные специфичные/legacy задачи. Молодое поколение не всегда и знает об это операционке, для них это архаика сродни MS DOS или OS/2.

Почему так получилось, что хорошая ОС уступила лидерство?

Одна из ключивых причин отказа от этой операционной системы — система распространения софта в ней, она же система портов. По задумке проекта FreeBSD весь софт поставляется в исходниках, который необходимо собирать на каждой машине. Процесс установки происходит как скачивание необходимых портов, настройка make-конфигов для сборки, компиляция пакетов со всеми зависимостями и потом уже донастройка конфигурации установленного софта. Да, там уже была неплохо работающая система зависимостей, подтягивающая все нужные пакеты. Но компиляция на каждой машине занимала много времени: десятки минут, можно было её запускать и идти пить чай в прямом смысле. И так на каждой машине.

Даже потеря времени на компиляции не главное. Основной недостаток такого подхода — практическое отсутствие воспроизводимости системы. Скачиваемые исходники меняются и поставленная сегодня система с софтом могла отличаться от такой же, поставленной несколько дней назад. Также компиляция могла учитывать особенности железа и скомпилированные бинарники софта могли отличаться на разных машинах даже при установке в одно время. Компиляцией под конкретное железо очень гордились сторонники FreeBSD, мол это выигрывало несколько процентов в производительности. И это "преимущество" автоматически закладывало возможность возникновения трудноуловимых багов на разном железе и вообще отстутствие гарантии, что скомпилированное здесь можно перенести на другую машину.

Отдельной историей был buildworld и buildkernel, т.е. обновление самого самого "мира" и ядра. "Пересборка мира" занимала огромное количество времени и в результате можно было получить нерабочую систему. Или рабочую систему, в которой что-то не работает из прикладного софта и требует "доработки напильником", причём это не всегда можно было определить сразу после пересборки, иногда проблема всплывала потом. Поскольку результат такого обновления в общем случаем не предсказуем, было разумно из RAID-зеркала (если такая возможность была) вынуть один из дисков в качестве бэкапа, обновиться и вернуть в случае успеха.

И так на каждом сервере! Если в небольших проектах такое можно было делать относительно безболезненно, то на больших проектах или high-availability процесс обновления представлял собой уже нетривиальную задачу. А если серверов не несколько штук, а хотя бы десятки — поддержка превращалалась в проблему.

Линуксы с их пакетными менеджерами и уже скомпилированными и протестированными(!) ядром, библиотеками и софтом имели огромное преимущество, их обновление происходило предсказуемо, а саму систему со всем софтом и окружением можно было несложно воспроизвести из пакетов.

Только по этой причине многие компании отказались от freebsd в пользу систем с более предсказуемой поддержкой. Та же участь постигла и линуксы без пакетных менеджеров, вроде того же gentoo.

Вывод: воспроизводимость и предсказуемость системы имеют ключевое значение, какой бы хорошей система ни была в других аспектах. Если этих качеств нет, поддержка системы через некоторое время становится сложной или вообще невозможной.

Казалось бы, история могла многому нас научить. Но и сейчас можно встретить много коммерческих и открытых решений, которые повторяют старые паттерны и их ошибки. Где-то даже такие паттерны преподносятся как благо.