Операционная система, которую можно читать

Когда-то давно, во времена Debian 3 и модемного интернета, у меня был win-модем.

Кто застал эту замечательную эпоху, тот уже примерно понимает масштаб удовольствия 🙂

Это был не полноценный аппаратный модем. Часть работы выполнялась драйвером на компьютере. Под Windows он работал нормально. Под Linux драйвер тоже был.

Но с нюансом.

Он был закрытым и платным.

Бесплатная версия, правда, существовала и даже вполне себе работала. Только скорость в ней была ограничена примерно до 27,7 кбит/с.

И меня тогда это страшно бесило.

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

И вот тогда же у меня впервые появилась мысль, которая, если смотреть на неё сейчас, была довольно наивной.

А почему операционная система вообще не может состоять из текста?

Не в смысле конфигов.

Вся.

Чтобы можно было открыть её обычным текстовым редактором, найти нужное место, исправить и получить систему уже с этим исправлением.

Условно говоря, взять Блокнот и поправить драйвер этого несчастного модема 🙂

Понятно, что в то время я вообще не представлял, как это можно реализовать. Программа же должна компилироваться. Процессор исполняет машинный код. Есть исходники, есть бинарник. Исходники лежат где-то отдельно, а система состоит из собранных программ.

Ну значит нельзя.

Мысль на этом благополучно отправилась куда-то на дальнюю полку и пролежала там больше двадцати лет.

А недавно я к ней вернулся.

И внезапно понял, что когда-то задавал немного не тот вопрос.

Зачем заставлять процессор исполнять текст?

Пусть компилирует.

Пусть существует промежуточное представление, машинный код, кэш, всё что нужно для нормальной скорости работы.

Важно другое.

Что из этого является самой программой?

Вот здесь и появилась основная идея TOS, TextOS:

The source tree is the installed system.

Исходное дерево и есть установленная система.

То есть программа в системе существует прежде всего как текст.

Не где-то в GitHub лежат её исходники, а здесь установлен бинарник.

Не где-то есть пакет, из которого когда-то что-то собрали.

Вот программа.

Вот её текст.

И именно этот текст является канонической формой программы.

Компилятор может превратить его во что угодно удобное процессору. Результат можно закэшировать, чтобы не компилировать программу при каждом запуске. Можно построить IR, байткод, нативный код.

Но всё это можно удалить и получить заново.

А текст остаётся.

Получается примерно то, о чём я думал ещё тогда.

Хочешь посмотреть, что делает ls — открываешь ls и читаешь.

Хочешь изменить его поведение — меняешь текст.

Хочешь понять, что именно запускается при старте системы — идёшь и читаешь соответствующую программу.

Не документацию к ней и не конфигурационный файл, который управляет неизвестно чем.

Саму программу.

В обычной системе с этим всё несколько сложнее.

Вот у тебя есть исполняемый файл.

Где его исходник?

Вероятно, где-то есть.

А это точно исходник именно этой версии?

С теми же патчами?

С теми же ключами компиляции?

Из него вообще собран тот бинарник, который сейчас лежит у тебя на диске?

Обычно это не проблема. Пока всё работает, никому и дела нет.

Но мне сама эта конструкция всегда казалась немного странной.

Если система открытая, почему исходный текст системы и сама работающая система существуют отдельно друг от друга?

В TOS я хочу эту границу убрать.

Разумеется, тут сразу появляется очень неприятный вопрос.

А как быть с железом?

Потому что можно сколько угодно красиво рассуждать про полностью текстовую систему, пока не потребуется загрузить прошивку Wi-Fi, микрокод процессора или какой-нибудь закрытый блоб производителя.

От этого никуда не деться.

Поэтому появилась идея /vendor.

Всё непрозрачное, внешнее, то, что система не может представить в своей обычной читаемой форме, должно лежать отдельно и быть явно видно.

Есть бинарная прошивка устройства?

Значит /vendor.

Есть микрокод процессора?

Туда же.

Нужен какой-то закрытый компонент, без которого конкретное железо не работает?

Хорошо. Но пусть он не притворяется частью остальной системы.

Мне кажется важным даже не избавиться от всех блобов. На современном компьютере это пока просто невозможно.

Важно видеть границу.

Вот здесь система, которую можно прочитать и изменить.

А вот здесь кусок, который производитель дал тебе как чёрный ящик.

По крайней мере ты точно знаешь, где заканчивается твой контроль.

Есть ещё одна вещь, которая обнаружилась уже гораздо позже.

Когда я впервые думал про ОС из текста, никаких современных языковых моделей, конечно, не было и близко.

А сейчас оказалось, что такая система очень хорошо ложится ещё и на работу с ними.

Не потому что я изначально делал TOS «операционной системой для ИИ». Не делал.

Просто если система состоит из текста, то её может читать не только человек.

Агенту не обязательно угадывать по документации, как устроен конкретный компонент, или искать исходники нужной версии где-то отдельно.

Он может открыть ту самую программу, которая установлена сейчас, и прочитать её.

Посмотреть её зависимости.

Посмотреть политику системы.

Посмотреть, почему она делает именно это.

И, если ему разрешено, изменить её тем же способом, которым изменил бы человек.

Получается немного забавный результат.

Идея, которая больше двадцати лет назад родилась у меня из раздражения на закрытый драйвер модема, внезапно стала ещё интереснее именно сейчас.

Не потому что компьютеры научились исполнять текст.

А потому что наконец стало понятно, что им этого и не требуется.

Текст может быть самой системой.

А всё остальное — результатом его исполнения.

До состояния, когда TOS можно будет поставить вместо Debian и пользоваться ей каждый день, ещё очень далеко. Сейчас это исследовательский проект, и половина интереса там как раз в том, чтобы проверить, не развалится ли эта идея при столкновении с реальной операционной системой.

Но сама мысль мне до сих пор нравится.

Я хочу операционную систему, которую можно открыть текстовым редактором и читать.

И если что-то в ней не нравится — исправить.

Примерно как мне хотелось сделать с тем самым драйвером модема лет двадцать с лишним назад.

Только теперь я хотя бы примерно понимаю, как к этому подступиться 🙂

Если кому-то стало интересно — вот ссылка на страницу проекта — Публичные проекты

Оставить комментарий

Email не публикуется. Поля, отмеченные *, обязательны.