osdev.orgРазработка операционных систем
ОШИБКИ НАЧИНАЮЩИХ (31 августа 2012 года форматирование не завершено)

Оглавление | Оригинал 

 Сюда вас привела идея "написать собственную операционную систему". Эта вики предоставит вам помощь, указания и ссылки в вашем не лёгком деле.

 Тем не менее, довольно часто, новички допускают ошибки, или имеют распространённые заблуждения о самой теме. Это не плохо - многие другие и раньше допускали эти ошибки, и ещё многие будут допускать их в последствии.

Содержание
1. Чем это не является...
   1.1. Есть учебник по ...?
2. Область применения
   2.1. Сроки
   2.2. Коммерческий OSDev
3. Дизайн
   3.1. Дизайн GUI
   3.2. Эмуляция ОС
   3.3. Именование
   3.4. Языки программирования
4. Образ ядра
   4.1. Проблемы загрузки
   4.2. Строки
5. Командная работа
   5.1. Сообщества проектов
   5.2. Рекрутинг

Чем это не является...

 Всё это может выглядеть как набор учебников для копирования и вставки, плюс форум, на котором можно задать вопрос, в случае, если вы застряли. Это не так. Мы ожидаем, что вы являлись опытным программистом в пространстве приложений пользователя, прежде чем решили написать собственную операционную систему. Кроме того, мы ожидаем, что вы читали о разработке операционных систем и изучили документация по выбранной вами платформе. Не следует ожидать, что эта вики или форум предоставят своего рода полное руководство по вашей собственной операционной системе, не говоря уже о руководстве по общим навыкам программирования.

 То, что вы можете найти здесь - документация оставленная теми, кто был здесь до вас, кто узнал нечто, читая тех. документацию, исходные коды и сообщения на форумах, а так же программировал методом проб и ошибок. То что вы найдёте здесь - это немного советов и указателей, которые могут помочь в поиске верного пути. Это не полная карта страны Оз. Это и не должно быть так.

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

 Это вики не будет расширяться в области руководства для начинающих, поскольку это не её цель. Оно создано именно для ответа на сложные вопросы, которые возникаю когда человек чувствует, что готов погрузиться в программирование пространства ядра.

Есть учебник по ...?
 Поскольку мы не можем удовлетворить все запросы начинающих разработчиков, часто задаются вопросы о том, где найти руководства и подробные разъяснения. Они не существуют. Трудные вещи не могут описываться лёгкой прозой, и есть много вещей которым достаточно сложно научить обезьян.

Область применения

Сроки
 Являясь частью изучения, хобби или коммерческой целью, разработка операционной системы занимает достаточно много времени. Ядру Linux понадобилось более года преданной работы чтобы приобрести некую полезность, причём Линус Торвальдс имитировал существующие и хорошо документированные особенности поведения для запуска готового пространства пользователя. Кроме того, для каждого успешного проекта, такого как Linux, существуют сотни проектов требующих большой работы .

 Следовательно, требуется разумное планирование работ для достижения разумных целей. Не думайте, что через три месяца ваша операционная система получит графический интерфейс и систему распознавания голоса, поскольку разработка операционный системы вообще не содержит RAD инструментов.

Коммерческий OSDev
 У нас нет такой темы. OSDev, вероятно никогда не возьмёт вас на работу. Кроме того, не мучайте свой мозг мыслью, что построив лучшую операционную системы вы станете богаты. Во всяком случае, история показывает что лучшие операционные системы не приобретают коммерческий успех, в то время, как те, которые которые не могут похвалиться ни дизайном ни вдохновением, часто своевременно подхватываются умными бизнесменами или оказываются в нужное время в нужном месте.

Дизайн

Дизайн GUI
 Вероятно, вам понадобится несколько лет, чтобы добраться до точки, где вы сможете начать работать с GUI. И, судя по всему, GUI является вторичным элементом операционной системы (в лучшем случае). Если ваша цель - создание лучшего вида вместо лучшей операционной системы, вам следует рассмотреть вопрос о реализации оконного менеджера а не самой операционной системы.

Эмуляция операционной системы
 Моя операционная система получит возможность выполнять программы Windows, Mac OS, Linux и даже PDP-11!

 Жаль лопать ваш мыльный пузырь, но так будет лучше! Эмуляция даже одной системы требует годы работы, особенно когда речь идёт о припроетарных системах, таких как Windows или MacOS (возможно вопрос с эмуляцией Linux будет самым простым). Даже Wine, несмотря на то что разрабатывается с 1993 года и пишется в пространстве пользователя, до сих пор имеет множество проблем с различными программами.

 Таким образом, вместо того чтобы сосредоточиться на эмуляции чужих систем, сосредоточтесь на собственной. Создавайте дизайн, развивайте систему и подружитесь с ней!

Именование
 Название - как правило последняя решаемая проблема. Поскольку "крутизна" названия - дело вкуса, мы не сможем помочь вам с этим. Более того, если вы свяжите имя проекта с некоторой определённой функциональностью, гдето в пути вы можете обнаружить, что понятие не совершенно, и вы можете изменить то, что первоначально считали ключевой особенностью. Нет ничего глупее, чем следовать некому пути развития только чтобы поддерживать название...

 Проще говоря, называя операционную систему <name>OS (JackOS, FredOS и т.п.) вы столкнётесь с проблемой когда появится второй член проекта. Хорошей идеей является выбор кодового имени (например такого как Longhorn, Chicago ... ), а выбор конкретного имени отложить ближе ко времени релиза.

Языки программирования
 Некоторые языки больше подходят для написания ядра, другие меньше. Прочитайте страницу о использовании некоторых языков отличных от Си.

Образ ядра

Проблемы загрузки
 Причины проблем, особенно на ранних стадиях разработки и при использовании самописных загрузчиков, заключаются в том, что часто несколько секторов получаются с диска. Следует либо регулировать количество секторов, полученных с диска, либо иметь загрузчик/загрузчик второй стадии для анализа файловой системы.

Строки
 Когда ядро написано на Cи, GCC размещает строки и константы в специальном разделе данных доступном  только для чтения. Этот раздел должен быть в вашем связующем скрипте, в секции .text, в противном случае могут появляться всяческие странные проблемы (не выводится текст на экран, ядро неожиданно становится больше 1 Мб, GRUB выдаёт ошибку загрузки сообщающую что ядро слишком велико и т.п.). Этот раздел называется .rodata в ELF и .rdata в COFF/PE (выходной формат для MiniGW/Cygwin). Сборка с помощью кросс-компилятора GCC позволит вам всегда быть уверенным в расположении .rodata.

 Также, вы можете настроить скрипт компоновщика для включения этих разделов:

// ...
.text 0x100000 {
  *(.text)
  *(.rodata*) /* <---- ELF кросс-компилятор или ELF *NIX (например Linux) */
  *(.rdata*)  /* <---- COFF/PE MinGW или Cygwin на Windows */
}
// ...      
 
Командная работа

Сообщества проектов
 Не переоценивайте свои шансы в возможности заинтересовать множество людей в вашем проекте. Даже наиболее успешные проекты обычно состоят из одного-двух человек работающих над кодом. И в большинстве случаев это не из за отсутствия необходимости.

 Закон Брукса гласит - "Чем больше людей участвует в проекте, тем больше времени требуется". единственный способ решения этой проблемы - разбить проект на части и найти людей которые будут работать над этой частью.

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

Люди которые присоединяются к проекту, как правило хуже чем программисты для которых был составлен этот список.