Трудности на пути создания собственной операционной системы

Мне кажется, что самый распространенный чрезмерно амбициозный проект, который программисты (особенно Comp. Sci. Grads) пытаются решить, - это создание вашей собственной операционной системы. (Попытка создать свой собственный язык программирования + компилятор, вероятно, еще более распространена, но далеко не столь амбициозна.)

Для тех, кто (как и я) достаточно глуп, чтобы попытаться: помимо огромных размеров, с какими самыми большими проблемами или неожиданными препятствиями вы столкнулись при попытке создать свою собственную ОС с нуля?

Изменить: Отличный вопрос ОС: Какие ресурсы для начала в разработке операционной системы?

6 ответов

Решение

Возможность говорить на основе реального опыта ( AROS, самые большие препятствия:

  • Курица и яйцо (без ОС <-> без приложений <-> без пользователей <-> не может привлечь разработчиков)
  • Почему даже пытаются конкурировать с Windows? Apple не преуспевает, у них много денег, а Linux не преуспевает, несмотря на огромное сообщество энтузиастов.
  • Крупные компании вообще не заинтересованы в том, чтобы внедрять свои приложения в вашу ОС (Adobe Acrobat Reader, MS Office, Macromedia Flash, Java от Sun). Без них и без хороших альтернатив OSS вы не сможете привлечь пользователей.
  • Это занимает очень много времени. В моем случае прошло около 15 лет, чтобы получить 1,0 (и мы еще не на 100%).
  • Совместимость. Чтобы получить каких-либо пользователей, вы должны быть совместимы с тем, что существует (чтобы люди могли продолжать использовать свои данные и т. Д.). Если вы совместимы, зачем переходить на вашу ОС?

Так что, если вы планируете написать свою собственную ОС, вы должны рассмотреть это:

  • Это займет много времени
  • Дольше всего вы будете одни. Мне повезло, потому что у меня было это невероятно фанатичное и преданное сообщество амиг, которое просто не сдавалось.
  • Вы должны найти нишу, где вы можете предложить сервис, который не может предложить ни одна другая ОС.
  • Люди, которые могут это сделать, часто получают лучшие предложения о работе, потому что восприятие "писать ОС - это сложно":)
  • Вы будете членом очень небольшой, элитной группы программистов, которые могут сказать: "Я написал свою собственную ОС, и она может сделать больше, чем просто напечатать" Hello world! ""

Был там, сделал это. Самым большим препятствием, по крайней мере для меня, были драйверы устройств. Кодирование ядра ОС - это "забавная часть", однако она бесполезна без возможности ввода / вывода (по крайней мере, диска, клавиатуры, видео, сети). Сегодня, если бы у меня снова было время и желание заняться таким проектом, я бы, вероятно, нацелился на виртуальную машину Xen, а не на аппаратное обеспечение - если не для чего-то другого, то потому, что оно скрывает множество отвратительных особенностей x86, а также оборудования. Xen представляет хороший унифицированный, аппаратно-независимый вид устройств ввода-вывода и все же дает вам достаточно свободы для игры с "интересными" частями ОС (mm, управление процессами, синхронизация, прерывания и т. Д.).

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

Серьезно, даже если у вас будут все спецификации для всех компонентов (например, USB, DMA, IRQ, ваш процессор...), вы обнаружите, что а) некоторые вещи не указаны (то есть, что произойдет, если вы отправите определенную последовательность в ваше USB-устройство) и б) некоторые вещи просто прослушиваются, и вам нужно обойти их (например, десятки ошибок в процессоре, которые подробно описаны в сообщениях об ошибках процессора, которые публикуются как Intel, так и AMD)

Я не знаю, сколько обходных путей для ошибок существует в современной операционной системе, но поскольку Linux и *BSD имеют открытый исходный код, их драйверы говорят вам многое, то есть об этом. И ожидайте получить некоторые серьезные негативные побочные эффекты, как этот.

Так что, да, если вы попытаетесь написать ОС, будьте готовы проклясть производителей аппаратного обеспечения и начните терять веру в качество современных ПК:-)

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

Интересно, что я задал вопрос о SO несколько недель назад, который касался того типа знаний, который был основным продуктом серьезного программирования на ПК 10-15 лет назад, и один комментатор сказал, что они считают это аппаратным вопросом.

Я их совсем не стучу, но я подумал, что это интересное размышление о том, как изменились навыки.

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

Возможно, вас заинтересует SkyOS - он был разработан в основном одним разработчиком (сейчас это небольшая команда разработчиков). В статье Википедии также есть хорошее резюме. Я думаю, что это хороший пример того, как такая грандиозная задача может быть предпринята и получится довольно неплохо. Со SkyOS они сделали несколько интересных вещей, и особенно здорово видеть, что это во многом благодаря усилиям одного человека в свободное время.

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

В нем отсутствуют четко определенные цели, а также проблемы со сроками / оценкой из-за недостатка опыта.

Также для программиста было бы полезно сначала создать операционную систему типа "привет", чтобы он / она изучал концепции, лежащие в основе разработки ОС, а затем мог сосредоточиться на разработке ОС (не изучая понятия ОС).

Другие вопросы по тегам