ОС не нужна для сервера. Я пишу бэкенд для некого сайта/spa-приложения и есть допустим некий сервер на nodejs. Сначала я как и все юзал всякие ubuntu/debian-дистрибутивы но мне было сильно неприятно думать что вообще происходит и какие процессы/сервисы запущены и какой софт там крутится (современный линукс-дистрибутив тащит кучу ненужного) и как все это контролировать.
Потом мне все это надоело - зачем мне все эти дистрибутивы - я ведь могу взять чистое ядро линукса и дальше скомпилировать ноду как статический бинарник (без внешних шаред c++ библиотек) и тупо запустить сервер ноды как единственный процесс при старте (init он же pid0).
Вы только представьте себе - никакого лишнего софта, нет systemd, нет busybox-а (он же shell), нет даже ssh-сервера (деплой через сборку нового образа) - только ядро линукса и сервер на ноде который взаимодействует с ядром через системные вызовы (никаких шаред библиотек)
Сейчас это у меня все крутится в докере но дальше я планирую упаковать этот образ в iso и задеплоить к хостеру как кастомный образ ос. И это будет работать эффективнее чем с докером - потому что типичный способ деплоя и запуска на сервере для хостера выглядит так hypervisor -> kvm-образ с каким-то там ubuntu/debian образом -> докер -> еще одно ос-окружение с nodejs-приложением а в моем случае это будет hypervisor -> kvm-образ с ядром линукса которое запускает нод-жс приложение
Продолжая тему можно легко прийти к выводу что в случае когда у тебя на сервере крутится единственный процесс то тебе не нужны и та огромная куча фич и абсракций и слоев которую предоставляет операционная система.
Зачем такому серверу нужны абстракция пользователей и группы пользователей вместе с их правами доступов которые есть в linux? (кстати я никогда не понимал совет "не запускать под рутом")
Зачем такому серверу нужен сложный платировщик задач который есть в linux? Почему бы просто не создать количество процессов равное количеству ядер и прибить каждый такой процес к соответствующему ядру и дальше вместо мютексов просто юзать спинлоки (да, будет 100% загрузка но кто-то там говорил что если ваш сервер не используется на 100% то вы теряете деньги) и тогда этот scheduler который есть в линуксе становится попросту не нужен
Зачем такому серверу нужна изоляция аддресного простанства и виртуальная память которую предоставляет линукс? Ведь у меня на сервере крутится доверенный код и у меня нет смысла изолировать отдельные части программы друг от друга (добавляя тем самым оверхед на их общение)
Зачем такому серверу нужно разделять выполнение кода на режим ядра и режим юзера (добавляя тем самым оверхед на переключение контекстов) ? Почему бы не запусить весь сервер в виде модуля ядра (и избавиться от оверхеда на переключения контекстов) если я все равно запускаю сервер в виде единственного init-процесса на голом ядре?
Кароче вот с такими взглядами я и пришел к выводу что операционная система на сервере не нужна а вместо этого нужно просто скомпилировать весь сервер в один бинарник для запуска на голом железе в режиме ядра без всякого рантайма операционной системы а ос будет представлена просто статической прилинкованной библиотекой в этом бинарнике и будет заниматься только общением с регистрами специфичного диска и сетевой карты (то есть будет играть роль драйвера)