Новая ветка ядра
Posted: Sat Jan 23, 2010 8:53 pm
Всем доброго времени суток!
Некоторые могли видеть, что около месяца назад я создал на Wiki страницу http://wiki.kolibrios.org/Open_message. Итак, у меня накопились мысли и появилось время, которое необходимо, что юы мысли привести в порядок и изложить.
(Пометка: убедительная просьба - читать ниже написанное не как КОМАНДУ или ПРИКАЗ, а как ВОПРОС К ОБСУЖДЕНИЮ. Я никогда не старался и не хотел быть главнокомандующим).
Diamond уже писал о том, что если сейчас составлять документацию на устройство системы (ядра в частности), то в очень многих моментах придется написать о том, что "реализовано вот так-то, хотя понятно что должно быть вот-так, но пока работает". Это очень важный момент. Поддержка LBA48, SMP, Plug&Play, ACPI, APIC (как следствие - USB, SATA и много чего ещё) упирается именно в не расширяемость ядра, в то, что ОЧЕНЬ многое написано "кривовато", о чем писал diamond. А причинах этих кривоватостей в том, что ядро не было СПРОЕКТИРОВАНО. Операционная система - очень сложный технический проект, который с бухты барахты, как его пытались последние 10 лет писать не пишется. И поверьте. Сейчас в ядре ~30 000 кода. Но. Это мертвый код. Кое-что вышеуказанное к нему добавить если и можно, то ТАКИМИ бредовыми костылями, что похлеще тех, что есть сейчас. Если сейчас ввести PnP, то придется переписывать всю модель ввода/вывода. А без этого - развитие мертво. Да, можно сделать PnP, USB, SATA без полной переписки. Но это будут большие громоздкие неудобные костыли. А без этого всего дальше можно только писать приложения, м.б. переписать часть GUI. И все. И дальше тупик. И лучше переписать сейчас, когда у нас пока реально хорошо работают только десяток приложений по 10 Кб.
В конце концов, даже если сделать PnP костылем, то прийдется переписывать работу с моделью ввода/вывода и устройствами. Сейчас появился kord. Он заменит в какой то момент загрузчик. Для GUI нужно вынести графику из ядра. Аналогично с сетью. Казалось бы, ядро тогда будет в порядке, т.к. основное переписали. НЕ БУДЕТ. Старый код будет глючить в связке с новым, и будет куча проблем.
Вообщем.
Я хотел бы поставить вопрос о реализации нового ядра.
А теперь ещё одна ремарка. Что лично я могу сделать, дабы не быть голословным. Во первых, проектировка ядра (естественно, что не в виде талмудов на 700 страниц, но общие представления применимо к x86 страниц на 10-20, во вторых, К++, в третьих прикладное, в четвертых тестирование и документирование (что очень не мало важно - если не будет задокументирована работа, то работа считай почти даром).
Почему я до сих пор ничего не делал в прикладном ракурсе. Потому что СМЫСЛА делать под ОС с мертвым кодом приложения?
Предлагаю этапы:
1) Проектирование путем коллективного обсуждения (и что немало важно - сведение итогового документа, на основании которого собственно будет реализовываться ядро и подтверждение его всеми, кто будет принимать участие в его разработке (а я надеюсь что это будет интересно практически всем ядерщикам, кроме того, если представить такой документ на WASM, то вполне реально получить ещё парочку ядерщиков, если они будут понимать, что и как требуется на основании этого документа. Ещё можно перевести на английский (благо немного) и отправить на OSDev.org).
2) Реализация. Синхронная реализация, с обсуждением отдельных фрагментов кода, логики работы, методов оптимизации, совместного тестирования, консультирования. Как выразился mike.dld год назад "Трудно переходить на нормальную коллективную разработку после стольких лет раздолбайства, возможно не все понимают, что это намного лучше, чем писать очередной свой велосипед, в тайне от всех, и так и не завершать начатое, однако я надеюсь на лучшее." (мне в интервью). Это единственный путь.
Некоторые могли видеть, что около месяца назад я создал на Wiki страницу http://wiki.kolibrios.org/Open_message. Итак, у меня накопились мысли и появилось время, которое необходимо, что юы мысли привести в порядок и изложить.
(Пометка: убедительная просьба - читать ниже написанное не как КОМАНДУ или ПРИКАЗ, а как ВОПРОС К ОБСУЖДЕНИЮ. Я никогда не старался и не хотел быть главнокомандующим).
Diamond уже писал о том, что если сейчас составлять документацию на устройство системы (ядра в частности), то в очень многих моментах придется написать о том, что "реализовано вот так-то, хотя понятно что должно быть вот-так, но пока работает". Это очень важный момент. Поддержка LBA48, SMP, Plug&Play, ACPI, APIC (как следствие - USB, SATA и много чего ещё) упирается именно в не расширяемость ядра, в то, что ОЧЕНЬ многое написано "кривовато", о чем писал diamond. А причинах этих кривоватостей в том, что ядро не было СПРОЕКТИРОВАНО. Операционная система - очень сложный технический проект, который с бухты барахты, как его пытались последние 10 лет писать не пишется. И поверьте. Сейчас в ядре ~30 000 кода. Но. Это мертвый код. Кое-что вышеуказанное к нему добавить если и можно, то ТАКИМИ бредовыми костылями, что похлеще тех, что есть сейчас. Если сейчас ввести PnP, то придется переписывать всю модель ввода/вывода. А без этого - развитие мертво. Да, можно сделать PnP, USB, SATA без полной переписки. Но это будут большие громоздкие неудобные костыли. А без этого всего дальше можно только писать приложения, м.б. переписать часть GUI. И все. И дальше тупик. И лучше переписать сейчас, когда у нас пока реально хорошо работают только десяток приложений по 10 Кб.
В конце концов, даже если сделать PnP костылем, то прийдется переписывать работу с моделью ввода/вывода и устройствами. Сейчас появился kord. Он заменит в какой то момент загрузчик. Для GUI нужно вынести графику из ядра. Аналогично с сетью. Казалось бы, ядро тогда будет в порядке, т.к. основное переписали. НЕ БУДЕТ. Старый код будет глючить в связке с новым, и будет куча проблем.
Вообщем.
Я хотел бы поставить вопрос о реализации нового ядра.
А теперь ещё одна ремарка. Что лично я могу сделать, дабы не быть голословным. Во первых, проектировка ядра (естественно, что не в виде талмудов на 700 страниц, но общие представления применимо к x86 страниц на 10-20, во вторых, К++, в третьих прикладное, в четвертых тестирование и документирование (что очень не мало важно - если не будет задокументирована работа, то работа считай почти даром).
Почему я до сих пор ничего не делал в прикладном ракурсе. Потому что СМЫСЛА делать под ОС с мертвым кодом приложения?
Предлагаю этапы:
1) Проектирование путем коллективного обсуждения (и что немало важно - сведение итогового документа, на основании которого собственно будет реализовываться ядро и подтверждение его всеми, кто будет принимать участие в его разработке (а я надеюсь что это будет интересно практически всем ядерщикам, кроме того, если представить такой документ на WASM, то вполне реально получить ещё парочку ядерщиков, если они будут понимать, что и как требуется на основании этого документа. Ещё можно перевести на английский (благо немного) и отправить на OSDev.org).
2) Реализация. Синхронная реализация, с обсуждением отдельных фрагментов кода, логики работы, методов оптимизации, совместного тестирования, консультирования. Как выразился mike.dld год назад "Трудно переходить на нормальную коллективную разработку после стольких лет раздолбайства, возможно не все понимают, что это намного лучше, чем писать очередной свой велосипед, в тайне от всех, и так и не завершать начатое, однако я надеюсь на лучшее." (мне в интервью). Это единственный путь.