Pull to refresh

Comments 55

До определения с главными вопросами, необходимо определиться с наиглавнейшим: Нафига писать собственную ОС, если это только не проект на университетском курсе?
Как насчёт самообразования? Одного из хобби? Или того, что написание ОС позволит хорошо понять принципы работы тех же Linux/Windows и научится эффективнее их использовать?
Для самообразования можно выбрать что-то более полезное для себя и общества. А понимание принципов работы какой-либо оси через написание своей — тонкий извращенный метод. По общим принципам операционок есть довольно качественная литература (которую кстати желательно изучить и при написании своей), а детали, ньюансы работы у каждой системы свои и для их понимания надо изучать именно эту систему. Например для начала можно найти книжку «Ядро Linux» и воспользоваться ей — будет быстрее и эффективнее.
Насчёт извращения может Вы и правы. Просто занимаясь одной теорией или изучая существующие системы многое останется за кадром, как мне кажется.
Для общества — возможно. Для себя — разве что собираешь вступить в команду, разрабатывающую какую-то ось, тогда надо разбираться с конкретно с нею. А если это просто хобби, то почему бы и не написать свою?
Написание и самообразование/понимание — абсолютно разные вещи. Как я уже говорил, принципы ОС изучаются на соответствующем курсе computer science. Очень часто тамошняя курсовая работа и есть написание простейшей «ОС». Простейшей в том понимании, что сконцентрироваться на всех аспектах, сервисах, надежности операционной системы одному человеку не под силу.
Для образования можно спокойно учить исходники Линукс (там сконцентрированны тонны опыта, неориднарных решений и вся полнота работающей годы и на всем железе системы). Можно взять простые ОС на С, которые можно понять и изучить за несколько вечеров.
Писать свою для понимания? Неа, не стоит.
UFO just landed and posted this here
Ну да, ну да, здоровый энтузиазм, понимаю. Только скажите, уважаемый, к какому такому открытию готовит статья? Вот сразу после слов: «После начального ликбеза необходимо определиться с главными вопросами:», что должны уяснить себе Настоящие Хабровчане (тм)? Вы действительно уверены, что архитектура и формат файлов — это главные вопросы создания ОС?! Мне очень не хочется разрушать светлую мечту стать вторым гейтсом или торвальдсом, но все перечисленные главные вопросы на самом деле даже не второстепенны.
ЗАЧЕМ плодить сущности? — вопрос главный. На какие средства разрабатывать проект в десятки тысяч человеко-лет? — вопрос главный. Где взять тысячи сообщников/последователей, чтобы проект не длился десятки тысяч лет? — вопрос главный. Почему бы не оказать помощь существующему проекту вместо разбазаривания времени — тоже главный вопрос. А пафос с Энштейном — это для школоты, мечтающей внезапно взять джекпот, повторив неожиданный успех Торвальдса написанием очередного миллионного псевдоядра.
UFO just landed and posted this here
Вы не ответили про открытие. Какое открытие здесь предполагается? Вот я могу вам открыть кое-что: ядро ОС — 1/100500 часть всей работы. А теперь в качестве ответной любезности, откройте и вы мне что-нибудь.

И последнее: курс про операционные системы и количество наглядного материала сегодня и в то время, когда учился Торвальдс — две большие разницы.
Вы всё ещё пытаетесь найти ответ на вопрос, который не имеет к данной заметке никакого отношения. Её идея «КАК начать и не бросить в связи с нетипичностью процесса разработки», а не почему, зачем или с какой целью… Именно по этому вопросы целей и не упоминаются в тексте. Предполагается, что читатель сам знает причину по которой ему стоит этим заниматься (как я) или не стоит (как Вы).
Нет, ответ на вопрос «как не бросить?» напрямую и безоговорочно связан с вопросом «зачем?». Если Вы заметили, я нигде не советовал НЕ писать свою ОС. Но ответить себе на вопрос «с какой целью я пишу эту ОС», построить план работ (и ужаснуться ее количеству :), понять насколько высок порог выхода новой системы в мир, не говоря о минимальной популярности, — ИМХО, нужно обязательно и гораздо раньше выбора компилятора. Иначе — очередная недокурсовая, убитое время и максимум — слегка удовлетворенное хобби, не более. Но 100% брошенный проект.
sarcasm mode on
Да действительно уж лучше я счастливого фермера на HTML5 наваяю! Всяко полезней для общества.
sarcasm mode off
Все Ваши вопросы актуальны при условии, что исходный вопрос стоит не «как написать свою ОС», а «как написать свою актуальную и коммерчески успешную ОС». Но вопрос так не стоит. Вопросы о сообщниках, популяризации и временных/финансовых затратах можно смело оставить за кадром.
Нет, исходный вопрос автора остался: как дописать свою ОС и не сойти при этом с ума и не умереть с голоду, образно говоря, разумеется. Про популяризацию и коммерциализацию речи даже не идет. Очень грубо говоря, автор хочет собрать свой автомобиль, приготовив разводной ключ (долго выбирая цвет ключа), пару гаек для мотора и кусок крыла. При этом нигде в его описании процесса создания автомобиля нет ни намека на чертежи, примерный объем работ и их стоимость. При этом он утверждает, что описание содержит в себе секрет как не бросить сборку автомобиля. А уже заготовленные детали и инструмент доказывают как раз обратное: автор понятия не имеет каких временных и материальных ресурсов заберет автомобиль до своей первой поездки. Откуда же он знает, что не бросит? Согласитесь, о друзьях, разъезжающих на серийных автомобилях, будущих салонах и агентах, говорить и вовсе рано. При этом никто(!) не подвергает сомнению способность самого автора в конце концов собрать этот автомобиль. Люди чего только не делают из принципа или любви к искусству.
>Интересно чтобы с нами со всеми было если бы именно так подумали создатели винды или линукса, юникса, макоси или ос/2!?

А с чего вы взяли, что они об этом не подумали?
Что касается Торвальдса, то у него был вполне конкретный ответ на вопрос «нафига писать свою ОС?» — «Чтобы иметь свободную/бесплатную юникс-подобную ОСь». Он даже вроде как-то говорил, что если бы BSD стала свободной чуть раньше, то он не начал бы писать Linux.
UFO just landed and posted this here
Что-то типа того, да:
Мой эмулятор терминала обрастал наворотами. Я регулярно использовал
его, чтобы подключиться к университетскому компьютеру и получить почту или
поучаствовать в конференции по Minix. Беда была в том, что я хотел скачивать
и закачивать файлы. То есть мне нужно было уметь писать на диск. Для этого
моей программе эмуляции нужен был драйвер дисковода. А еще ей был нужен
драйвер файловой системы, чтобы она могла вникать в организацию диска и
записывать скачиваемые файлы.

Одним словом, жизнь моя не блистала разнообразием. А разработка
драйверов для дисковода и файловой системы казалась интересным делом. И я
решил им заняться. Написал драйвер дисковода. А поскольку я хотел записывать
файлы в файловую систему Minix, да к тому же эта система была хорошо
документирована, я сделал свою файловую систему совместимой с системой
Minix. Таким образом я мог читать файлы, созданные в Minix, и писать файлы
на тот же диск, так что Minix могла читать файлы, созданные моей программой
эмуляции терминала.
Я крутился как белка в колесе: программирование — сон — программирование — еда (соленые сухарики) — программирование — сон — программирование — душ (на скорую руку) — программирование. К концу работы
стало ясно, что моя программа превращается в операционную систему. И я стал
думать о ней не как о программе эмуляции терминала, а как об операционной
системе. Этот сдвиг произошел, вероятно, в дурмане одного из затянувшихся
сеансов программирования. Было это днем или ночью? Не знаю. Сижу я в своем
старом халате и работаю с программой эмуляции, снабженной дополнительными
функциями. А потом вдруг понимаю, что этих функций стало так много, что
программа превратилась в рабочую версию операционной системы.

И уже после этого он решил раздобыть спецификации POSIX и начал реализовывать сисколы (сначала подряд по списку, потом по мере надобности).
Хочу сказать только одно: бросил писать, т.к. понял что без контента (прикладных и нужных программ) она обречена на провал. Возможно, все мы рано или поздно приходим к этой мысли. Нет контента — нет ОС. Нет ОС — нет контента. Она просто не нужна.
Полностью согласен, без контента толку от ОС — ноль. Вот только я предлагаю не бросать разработку по этой причине, а наоборот продолжать — чтобы со временем обустроить ОС до годности к использованию (пусть и ограниченному). Ведь никто не гонит со сроками, а реализуя то что есть в привычных ОС (не обязательно писать всё с нуля, можно и портировать), можно узнать много нового (и никогда не знаешь, какой опыт и где может пригодиться).
Да, согласен. Со многим согласен. Кроме одного. Я как-то вечером сидел и курил, размышляя об этом и пришел к такой мысли — на сколько я хочу слить свою жизнь в унитаз? Понял — что не очень-то хочу. Поэтому занялся другими проектами. По сути — это сливание своего времени (жизни в унитаз), если не появится модели производства контента (востребованного) для этой ОС. А это в свою очередь значить либо конкурировать с гигантами (предлагая лучшие сервисы или другие усовершенствования для работы уже существующих программ), либо сделать ее узкоспециализированной (МСВС или еже с ней). Ни то ни другое без чуда — просто не реально. Кому я нужен с таким опытом? Пошел писать сайты) Да, это (написание ОС) намного интереснее и почти мечта. На то она и мечта…
Если мечта написать свою ось, то почему бы нет. Если мечта написать востребованную другими ось, то тут, да, в одиночку только время зря потратишь, скорее всего.
Любое хобби можно рассматривать как слив времени в унитаз, но если не будет хобби, то зачем тогда жить?
Следование группе стандартов POSIX и перенос стандартной библиотеки позволяют не беспокоиться по поводу софта.

Пример: быстро развивающийся проект Pedigree OS, в котором участвует автор довольно известного туториала — Джеймс Моллой.

К тому же, все вышесказанное характерно только для декстопных ОС, в то время как миниатюрные ядра систем реального времени и ОС для встраиваемых решений часто рассматриваются в качестве фреймворка для создания собственного продукта. Здесь уже проблема отсутствия ПО не стоит, решающими факторами оказываются характеристики данного решения.
Тут ещё на Хабре как-то Денис Попов писал о создании «своей ОС»…
Эпичный был топик.
Я к тому, что не все «попытки разработки ОС» хабраюзерами в начале статьи указаны.
Можете посоветовать какие-либо материалы по экзоядру и library OS? А то по определённым причинам заинтересовался данной темой, но найти хороших текстов в Интернете не получилось.
К сожалению не могу, так как больше микроядрами интересуюсь, да и с информацией по экзоядрам как-то сложнее. Но сам бы с удовольствием ознакомился с пободными материалами, так что надеюсь, кто-нибудь всё же подскажет что-то по теме.
Можете посмотреть сорцы XOmB-а на github, правда он написан на D.
Вот тут есть описание архитектуры экзоядерной ОСи. Где-то на хабре есть перевод первой части, дальше не переводил — тема оказалась невостребованной.
Неправда, в «Подготовке» он упомянут. В конце нету просто из-за того что в остальных подобных статьях его очень часто указывают.
UFO just landed and posted this here
У меня вопрос. Я совсем не знаю ассемблера, но люблю C++. Можно ли написать свою ОС, не используя ассемблер вообще?
«не используя ассемблер вообще» нельзя. Но минимально необходимый объём ассемблера выучить нетрудно. А ассемблер тут действительно необходим только для непосредственного взаимодействия с аппаратурой и организации других низкоуровневых вещей вроде системных вызовов. Для всего (ну, почти всего) этого пишутся удобные обёртки, а дальше уже их используют в С++.

Так что не стоит из-за незнания ассемблера отказываться от попыток, он не так уж и страшен.
UFO just landed and posted this here
Да, я это понимаю, и про HAL упоминал. Просто хотелось явно указать, что код на ассемблере можно раз написать, запрятать в высокоуровневые конструкции и «забыть» о нём.
UFO just landed and posted this here
>> Я совсем не знаю ассемблера, но люблю C++
Это зря. Ассемблер — самый простой язык для освоения.
Если есть голова и понимание основ машинной арифметики, то вряд ли это займёт больше часа.
Даже абсолютному новичку в программировании для начала хватит осознания что такое регистры и как организована память.
Мнемоники не сложно посмотреть в справочнике.
> Ассемблер — самый простой язык для освоения.

Удивительное высказывание, которое я вижу уже не в первый раз. Примитивы ассемблера выучить просто: всего-то 20 регистров и 30 команд. Но сила ассемблера — в разнообразии их сочетания, в разнообразии сочетания их сочетаний, которое дает разнообразие разнообразий… И это только для одного конкретного ассемблера, под конкретную архитектуру. И я молчу про граничные условия, которые возникают, если в однобайтовый регистр попытаешься запихнуть двухбайтовое число… Слишком самообманчиво думать, что если вы знаете, как поместить число в регистр, вы знаете ассемблер.
>> в однобайтовый регистр попытаешься запихнуть двухбайтовое число
Транслятор ругнётся. Да и обычно синтаксис явно определяет разрядность операндов,
так что это просто невозможно сделать.

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

Знание языка — это умение на нем программировать. И никак иначе. В вашем случае это не знание языка, а знание его синтаксиса и команд — в лучшем случае. Потому что уж очень часто мне попадаются люди, которые говорят, что они знают язык А, но на деле — они его не знают, писать на нем хорошие и аккуратные программы не могут, хотя синтаксис им знаком, да. Это никак нельзя назвать знанием языка.

Вы уже много лет пишете на ассемблере, и потому-то вам эта задача кажется простой. Любая преодоленная трудность кажется простой. В Интернете уже, кстати, поднимался вопрос: Assemby first programming language, люди сходятся на мнении, что это не язык для новичка.
>> В вашем случае это не знание языка, а знание его синтаксиса
Да, я именно о знании синтаксиса и говорил. Для асм-куска длинной в 10-100 строк, о котором говорится в данном топике не нужно быть гуру ассемблера.

>> Любая преодоленная трудность кажется простой
Да не было никаких трудностей.
Я просто электронникой занимался в детстве, а регистры и триггеры для меня это естественная среда. Ассемблер стал натуральным продолжением моих знаний.
Когда я смотрю / пишу код, думаю на уровне конвеера CPU.
Ну вот для вас и не трудность, — это чистой воды субъективизм. Естественно, что не только я, — но и другие с вами не согласны, потому что в большинстве других случаев ассемблер совсем не «самый простой язык для освоения». И по этой фразе нельзя сказать, что вы думали исключительно о синтаксисе, о регистрах и командах.
Знание языка это очень общее понятие. Вы вкладываете лишний смысл туда.
Вот вы знаете русский? А «Войну и Мир 2» сможете написать? Это ортогонально.

>> писать на нем хорошие и аккуратные программы не могут

Синтаксис и подход к программированию это одно, а способность, как вы говорили, «писать хорошие и аккуратные программы» это совершенно отдельная вещь, которая слабо связана с языком программирования.
Тот кто пишет «хорошие и аккуратные программы» на одном языке, вряд ли будет на другом языке писать «плохие и хаотичные».

>> И по этой фразе нельзя сказать, что вы думали исключительно о синтаксисе, о регистрах и командах.

А в ассемблере кроме простого синтаксиса и нет ничего больше.
Там _нечего_ учить, кроме как не зависящие от языка алгоритмы и специфичные для конкретного CPU способы повышения эффективности кода. Не нужно читать 1000 страничный стандарт C++.

> Тот кто пишет «хорошие и аккуратные программы» на одном языке, вряд ли будет на другом языке писать «плохие и хаотичные».

А вот неправда. Я сейчас на том же ассемблере напишу такой код, что мама не горюй. Избыточный и ужасно кривой. На PHP тоже наваяю такого, что потом стыдно будет. Хотя знаете, С++ я знаю очень хорошо. Но именно потому я говорю, что знаю его, ибо могу писать на нем хороший код. Безусловно, часть опыта в С++ можно перенести на PHP, но куда больше деталей останется за кадром. А ведь синтаксис-то я знаю.

Я не вкладываю в то понятие ничего лишнего. Это известная и признанная аксиома. А вот возьмите тот же LISP, — у него синтаксиса не больше, чем в ассемблере. Но находятся задачи, чьи решения от разных лисперов так отличаются, что это рождает внутриязыковые споры. Однако ж, чего там изучать? Дерево вызовов, — вот и все…
UFO just landed and posted this here
ОК, это только радует. Заменил на «отложено на неопределённый срок».
Оси пишут так мало потому что это как правило бессмысленно. На это уходит куча сил и времени, а результат бесполезен практически (кроме полученных знаний). Потому что есть Linux/Freebsd/Unix/Windows, которые развивает большое количество человек. Смысл писать еще одну ось?
А почему нет? Неужели обязательно должны быть конкретные планы на выход на рынок и т.д.? По-моему можно делать что-то ради интереса.

Трата времени — да, но речь не идёт о разработке в ущерб чему-то более важному. И уж тем более никто не предлагает писать убийц Linux/Freebsd/Unix/Windows, это было бы просто смешно (хотя вероятно возможно, при наличии соответствующих ресурсов).
А про KolibrioOS уже забыли? Система живет, и потихоньку развивается!
Не замечал, чтобы развитие было активным.
Оно есть, даже под отдельные решения (eBox-3300MX) идет разработка.
Не забыли, просто не встречал упоминаний о ней на Хабре (хотя сейчас поиском нашёл). Да и указывал только те, которые тут подробно описывались. Плюс KolibriOS, как довольно успешный проект, не вяжется с фразой «попыток разработки ОС».

Надеюсь система будет развиваться и дальше!
UFO just landed and posted this here
Sign up to leave a comment.

Articles