LINUX.ORG.RU

История изменений

Исправление robus, (текущая версия) :

Да пусть срач всполыхнёт с новой силой!

Чего сраться, нужно писать принципиально новый инит.

Во-первых — его главный процесс (который имеет PID 1) должен иметь минимум библиотек с которыми он слинкован, код должен быть максимально простым (возможно даже примитивным) — чтобы не упал. Задача этого процесса — назапускать процессов, делающих всю настоящую работу (парсинг конфигов, запуск демонов и т.д.), и при падении worker-ов перезапускать их.

Во-вторых — демоны могут быть описаны как простые скрипты запуска и остановки (раздельно), начинающиеся со строки #!${path_to_shell}, всё остальное содержимое процесс-гвардиан этого демона скармливает проге ${path_to_shell} на стандартный ввод. Опционально демон может содержать файлы dependencies и environment в которых описаны соответственно все зависимости демона (по умолчанию зависимостей нет) и окружение демона. Это вместе с многопроцессностью инита позволит реализовать конкурентную загрузку.

В-третьих — наследование демонов. Второй способ описания демонов — файл inherited, содержащий имя демона, на котором основан текущий. Тогда те файлы, которые есть в папке демона заменят соответствующие файлы демона родителя (для файла окружения применять слияние с приоритетом потомку).

В-четвёртых — тулза для миграции с устаревших инитов. Она позволит автоматизировать процесс перехода, и как следствие продавить новый инит всюду. Нечего сидеть на копролитах!

Имея такой инит можно реализовать:

  • парсинг демонов на gpu — так как процессы-гвардианы демонов уже не являются главным процессом ОС, то можно их прилинковать к libopencl.so или libGL.so и реализовать парсинг с использованием ядер или вычислительных шейдеров. Если написать шел, выполняющий скрипты с использованием мощностей gpu, то всё совсем станет хорошо.
  • Добавление аналогов «типов юнитов» из systemd — это просто демоны шаблоны, использующие переменные окружения (т.е. всякие ExecStart, ExecStop будут прописываться в environment потомка).

Насчёт смены раскладки и человечного скроллинга в tty — этим лучше пусть занимается отдельный проект. Принципиально новая замена tty (но это уже будет совсем другая история).

Исходная версия robus, :

Да пусть срач всполыхнёт с новой силой!

Чего сраться, нужно писать принципиально новый инит.

Во-первых — его главный процесс (который имеет PID 1) должен иметь минимум библиотек с которыми он слинкован, код должен быть максимально простым (возможно даже примитивным) — чтобы не упал. Задача этого процесса — назапускать процессов, делающих всю настоящую работу (парсинг конфигов, запуск демонов и т.д.), и при падении worker-ов перезапускать их.

Во-вторых — демоны могут быть описаны как простые скрипты запуска и остановки (раздельно), начинающиеся со строки #!${path_to_shell}, всё остальное содержимое процесс-гвардиан этого демона скармливает проге ${path_to_shell} на стандартный ввод. Опционально демон может содержать файлы dependencies и environment в которых описаны соответственно все зависимости демона (по умолчанию зависимостей нет) и окружение демона. Это вместе с многопроцессностью инита позволит реализовать конкурентную загрузку.

В-третьих — наследование демонов. Второй способ описания демонов — файл inherited, содержащий имя демона, на котором основан текущий. Тогда те файлы, которые есть в папке демона заменят соответствующие файлы демона родителя (для файла окружения применять слияние с приоритетом потомку).

В-четвёртых — тулза для миграции с устаревших тулкитов. Она позволит автоматизировать процесс перехода, и как следствие продавить новый инит всюду. Нечего сидеть на копролитах!

Имея такой инит можно реализовать:

  • парсинг демонов на gpu — так как процессы-гвардианы демонов уже не являются главным процессом ОС, то можно их прилинковать к libopencl.so или libGL.so и реализовать парсинг с использованием ядер или вычислительных шейдеров. Если написать шел, выполняющий скрипты с использованием мощностей gpu, то всё совсем станет хорошо.
  • Добавление аналогов «типов юнитов» из systemd — это просто демоны шаблоны, использующие переменные окружения (т.е. всякие ExecStart, ExecStop будут прописываться в environment потомка).

Насчёт смены раскладки и человечного скроллинга в tty — этим лучше пусть занимается отдельный проект. Принципиально новая замена tty (но это уже будет совсем другая история).