Не писать ядро, а реализовать на языке программирования Си, используя стандартный интерфейс вызовов Linux свой другой бинарный интерфейс вызовов.
Тогда программы будут опираться на этот новый интерфейс системных вызовов,
и его можно будет специфицировать в виде документа, похожего на стандарты POSIX.
А к тому времени и Будден со своим ядром подтянется...
QEMU же как-то эмулирует некоторые инструкции? Вот будет тут тоже такая поддерживающая "виртуализация".
т.е. запускаем виртуальную машину qemu, у неё там есть ключи командной строки, явно задающие - какое ядро грузить.
Вместо линуксового ядра указываем наше прокси-ядро, которое реализует наш не POSIX-интерфейс системных вызовов,
но само вместо реализаций функций самостоятельно все вызовы перенаправляет в стандартное ядро хост-машины.
Собственно, драйверы паравиртуалиазции в Linux и так уже есть, осталось только кастомный API реализовать и собрать это всё в блоб.
Т.е. форкнуть ядро Linux и приделать к нему дополнительное API, не такое как там уже есть.
Зачем это нужно? Для того, чтобы АПИ ядра понимал русский язык, как никто другой (русские названия функций, параметров - вот это всё).
В частности, есть в Linux неприятный вызов exec, которому bash передаёт аргументы уже распарсенными.
Если мы хотим парсить по-своему, то желательно, чтобы АПИ принимал все аргументы одной строкой, а программа уже сама потом по-русски парсила (без всяких там bash).
Это, конечно, не путь чучхе, но зато вы этим займётесь может быть, и временно перестанете пилить Лиса за то что он ничего не делает.
Этот пост спровоцирован фразой
отвратительный механизм токенизации
[html]<a href="http://xn--b1aga5e.xn-----6kcajervcdvqarhfgengcekya4c.xn--p1ai/viewtopic.php?f=5&t=148#p858">с форума "Вече"</a>[/html]
Я не уверен, что конкретно exec и fork требуют создания нового АПИ (надо копать реализацию exec в libc), но БудДену там ещё сокеты не нравились... Поэтому новый АПИ решит все эти и им подобные проблемы сразу, "одним махом".
"The child process goes on either to execute a different set of functions in the same code as the parent, or, frequently, to use the execve() system call to load and execute an entirely new program. An execve() call destroys the existing text, data, stack, and heap segments, replacing them with new segments based on the code of the new program." - тут надо обратить внимание, что execve это system call, т.е. является частью ABI.
пример вызова на ассемблере:
[html]<a href="https://stackoverflow.com/questions/9342410/sys-execve-system-call-from-assembly">https://stackoverflow.com/questions/9342410/sys-execve-system-call-from-assembly</a>[/html]
Т.е. нам нужен ещё один системный вызов, вместо этого. Этот новый системный вызов не будет входить в стандарт POSIX, зато можно ввести его в свой собственный стандарт. Ведь когда будет несколько русскоязычных ядер, желательно чтобы прикладные программы работали на них всех сразу.
Открывается новое направление деятельности для энтузиастов: придумывание нового АПИ, причём не абстрактно, а довольно малыми затратами реализуемого.
Отредактировано Лис (2019-08-30 21:37:01)