Студент из Китая заново написал раннюю версию Linux на Rust. Проект получил название linux-0.11-rs и повторяет возможности ядра Linux 0.11, выпущенного в конце 1991 года. Новая система загружается на эмуляторе компьютера с процессором i386, запускает командную оболочку и позволяет работать с файлами и базовыми программами.
Автор проекта использует псевдоним Poseidon и учится в Пекинском университете авиации и космонавтики. Он не переводил исходный код Linux с языка C строка за строкой, а написал систему заново, сохранив основные принципы работы старого ядра.
Именно поэтому linux-0.11-rs нельзя назвать ответвлением современного Linux. В проекте нет актуального ядра, драйверов для нынешнего оборудования и десятилетий изменений, накопившихся с начала 1990-х годов. За основу взята версия 0.11, появившаяся всего через несколько месяцев после первого публичного выпуска Linux.
Линус Торвальдс опубликовал Linux 0.11 8 декабря 1991 года. В сопроводительном сообщении он писал, что версия получила множество исправлений и стабильно работала по крайней мере на его собственном компьютере. Система загружалась с дискет, поддерживала жёсткие диски, файловую систему Minix и запускала командную оболочку с правами суперпользователя.
К тому моменту Linux всё ещё оставался небольшим экспериментальным проектом для компьютеров на базе Intel 386. Современных графических интерфейсов, сетевых служб и широкой поддержки оборудования в нём не было. Однако версия 0.11 уже позволяла установить систему на жёсткий диск, создать файловую систему, подключить разделы и запускать пользовательские программы.
Новая реализация сохраняет многие возможности оригинала. Ядро управляет процессами, виртуальной памятью и сигналами, поддерживает файловую систему Minix v1, жёсткие диски ATA, текстовый вывод через VGA, клавиатуру PS/2, последовательную консоль и полный набор системных вызовов Linux 0.11. Единственным крупным компонентом, который автор сознательно не стал переносить, осталась работа с дисководами.
Rust-версия получилась заметно крупнее исходного ядра. По оценке автоматического анализатора, весь репозиторий содержит около 47 тысяч строк кода. Примерно 15 тысяч приходится непосредственно на ядро, а остальная часть включает библиотеки, инструменты сборки и программы, которые запускаются внутри системы.
Размер вырос не только из-за особенностей Rust. Автор не ограничился самим ядром и добавил полноценное пользовательское окружение. После загрузки система запускает процесс init, открывает командную оболочку и предоставляет десятки привычных утилит для работы с файлами, каталогами и текстом.
В репозитории находится более 80 программ, напоминающих стандартные Unix-утилиты. Среди них есть команды для просмотра каталогов, копирования и удаления файлов, обработки текста и управления процессами. Автор также написал собственную оболочку с конвейерами, переменными, условиями, циклами, функциями, подстановкой команд, историей и автодополнением по клавише Tab.
Для пользовательских программ подготовлена отдельная библиотека, устроенная похоже на стандартную библиотеку Rust. Благодаря ей приложения могут обращаться к файлам, окружению, процессам и времени через привычные для разработчиков интерфейсы, а не вызывать системные функции ядра напрямую.
Система рассчитана не на реальный компьютер, а на эмулятор QEMU. Он воспроизводит работу старого 32-битного процессора i386 и совместимого с ним оборудования. После сборки пользователь получает загрузочный образ диска, который можно запустить одной командой.
Проект включает автоматические тесты. Они запускают ядро в QEMU, подключаются к последовательной консоли и проверяют команды с помощью подготовленных сценариев. Это позволяет убедиться, что система загружается, оболочка принимает команды, а отдельные функции продолжают работать после изменений в коде.
Автор не скрывает учебный характер работы. В описании репозитория он ссылается на исходный код Linux 0.11 и учебный проект rCore, посвящённый созданию операционных систем на Rust. В будущем Poseidon планирует подготовить подробное руководство, по которому систему можно будет собрать с нуля.
Rust выбран не случайно. Язык позволяет контролировать память почти так же точно, как C, но проверяет многие потенциально опасные операции ещё во время компиляции. Система типов помогает предотвращать обращение к уже освобождённой памяти, использование неверных ссылок и одновременное изменение одних данных из нескольких участков программы.
Такие свойства особенно полезны при разработке ядра, где ошибка в работе с памятью может привести не только к сбою одной программы, но и к падению всей системы. Однако Rust не избавляет разработчика от всех проблем. В коде низкого уровня всё равно приходится использовать небезопасные операции для настройки памяти, обработки прерываний и прямой работы с оборудованием.
linux-0.11-rs не показывает, как выглядел бы современный Linux, полностью переписанный на Rust. Между версией 0.11 и нынешним ядром лежат десятилетия разработки, миллионы строк кода, тысячи драйверов и поддержка множества процессорных архитектур.
Переписать актуальный Linux с нуля силами одного человека практически невозможно. Даже точное повторение его поведения потребовало бы воспроизвести огромное количество внутренних интерфейсов, особенностей оборудования и совместимости с существующими программами.
С ранним ядром задача выглядит гораздо реалистичнее. Linux 0.11 достаточно мал, чтобы один разработчик мог разобраться в его устройстве, но уже содержит основные части полноценной операционной системы: планировщик процессов, управление памятью, файловую систему, драйверы и системные вызовы.
Благодаря этому проект позволяет сравнить два подхода к системному программированию. Оригинальное ядро создавалось на C и ассемблере для оборудования начала 1990-х годов. Новая версия использует Rust, более строгую структуру модулей и современные инструменты сборки, но при этом повторяет поведение старой системы.
Автор не пытался добиться полного совпадения кода. Он сохранил функции Linux 0.11, но переработал внутреннюю организацию и использовал характерные для Rust типы и абстракции. Поэтому linux-0.11-rs представляет собой самостоятельную реализацию, а не механический перевод.
Прямого отношения к недавнему спору вокруг искусственного интеллекта и разработки Linux проект тоже не имеет. Его публикация просто совпала с очередной резкой дискуссией о том, какое место код, созданный с помощью языковых моделей, должен занимать в открытых проектах.
В репозитории нет точного описания того, какая часть кода написана с помощью ИИ. Большое число последовательных изменений, собственные тесты, пользовательская библиотека, оболочка и документация показывают, что работа не свелась к однократной автоматической генерации. При этом отдельные участки вполне могли создаваться или редактироваться с помощью программных помощников.
Использовать linux-0.11-rs в реальных устройствах никто не предлагает. Система работает только в специально подготовленном эмулируемом окружении, повторяет возможности ядра возрастом более 34 лет и не рассчитана на защиту современных данных или подключение к актуальному оборудованию.
Ценность проекта в другом. Он даёт возможность изучить устройство операционной системы на сравнительно небольшом примере, посмотреть, как старые решения Linux можно выразить средствами Rust, и самостоятельно пройти весь путь от загрузчика до командной оболочки.
Первую версию Linux Торвальдс тоже создавал как студенческий эксперимент. В 1991 году проект работал только на ограниченном наборе компьютеров и не претендовал на роль основы для серверов, смартфонов и суперкомпьютеров. Linux-0.11-rs вряд ли повторит его дальнейшую судьбу, но продолжает ту же традицию: разбирать сложные системы, писать собственные реализации и учиться на работающем коде.