Začínáme
On 2 října, 2021 by adminPředevším je vývoj operačního systému pravděpodobně jednou z nejnáročnějších věcí, které můžete na počítači dělat (vedle zabití závěrečného bosse ve hře Doom na obtížnost Nightmare). Sestavení operačního systému vyžaduje mnoho znalostí o několika složitých oblastech v rámci informatiky. Musíte rozumět tomu, jak funguje hardware, a umět číst a psát složitý jazyk assembleru i jazyk vyšší úrovně (například C, C++ nebo Pascal). Vaše mysl se musí umět zaobírat abstraktní teorií a pojmout nesčetné množství myšlenek. Už se cítíte znechuceni? Nebojte se! Protože všechny tyto věci jsou také tím, co dělá programování OS zábavným a zábavným.
Nic se nevyrovná pocitu úspěchu, když konečně po hodinách snažení vyřešíte problém. A po nějaké době se můžete ohlédnout zpět a vidět všechny ty věci, které jste vytvořili od nuly. Váš vlastnoručně napsaný systém je schopen nastartovat, provádí kouzla vůči hardwaru a poskytuje uživateli uživatelské rozhraní a programy, se kterými si může hrát.
Při vytváření operačního systému neexistuje žádná absolutní cesta, kterou byste se museli vydat. Jakmile svůj počáteční systém zprovozníte (a to se vám podaří vyhledáním vhodných výukových programů), zvolíte si cestu, kterou se chcete vydat dále. Váš operační systém je přesně takový – váš. Máte nad ním konečnou kontrolu a obloha je pro vás limitem!
Obsah
- 1 Tvrdá pravda
- 2 Zodpovědnost
- 3 Potřebné znalosti
- 4 Uspořádejte si své plány
- 5 Výběr vývojového prostředí
- 5.1 GNU/Linux
- 5.2 Windows
- 5.3 MacOS
- 6 Testování operačního systému
- 7 Ochrana kódu
- 8 Společné výchozí body
- 9 Získávání dalších znalostí
- 10 Viz také
- 10.1 Články
- 10.2 Vlákna
- 10.3 Externí odkazy
Tvrdá pravda
Snad vás neodradí základní fakt, že vývoj operačního systému je složitý a trvalý proces. Pravdou je, že vývoj operačních systémů je skutečně nesrovnatelný, protože vyžaduje maximální trpělivost a pečlivý návrh kódu a vrací jen velmi málo nebo vůbec žádné „okamžité uspokojení“, kterého se vám dostane při vývoji věcí, jako jsou hry a webové skripty.
Byli jste poměrně důkladně varováni před tvrdou prací, která vás čeká, ale pokud máte stále zájem, pak pokračujte vpřed do říše programátora operačních systémů. Připravte se na občasné záchvaty zmatku, znechucení a pro některé z nás… dočasného šílenství. Časem a s dostatečným nasazením se ocitnete mezi elitní hrstkou těch, kteří přispěli k vytvoření funkčního operačního systému. Pokud vás na této cestě přece jen něco odradí, osvěžte se obsahem této knihy. Snad vám připomene, proč jste se na tak šílenou cestu vůbec vydali.
V této fázi by se také vyplatilo přečíst si stránku Chyby začátečníků. Uživatelé na fóru si všimli, že spousta těchto chyb se časem opakuje, a vyhnout se jim je skvělý způsob, jak ze sebe neudělat hlupáka.
Odpovědnost
Lidé mají tendenci tvrdit, že je v pořádku psát neefektivní software, a uvádějí, že počítačové systémy jsou dnes tak rychlé, že dopad nepoznáte. Tento typ mentality je při návrhu operačních systémů nebezpečný. Při tvorbě jednoduché aplikace může být v pořádku napsat nedbalý kód, ale pokud jde o kritický kód, který může být volán tisíckrát za sekundu, je třeba odstranit veškerou režii, kterou lze. Operační systém by měl dodávat počítači základní prostředky pro běžící aplikace s co nejmenší komplikací, abstrakcí a režií.
Lidé, kteří v dnešní době navrhují operační systémy, mají tendenci mít mentalitu „všeho, jen ne kuchyňského dřezu“. Berou na sebe zodpovědnost za všechno, což je samozřejmě dobře, ale nemělo by se to dělat na úkor toho, že se umožní rozkvět špatně napsaných programů. Existuje mnoho věcí, které se dějí „pod kapotou“, když dojde k chybám v programu. Špatně napsané programy stojí drahocenný čas provádění a zahrnují přepínání úloh, které jsou drahé jak paměťově, tak frekvenčně. Doporučujeme vám, abyste od špatně napsaného softwaru odrazovali.
Potřebné znalosti
Hlavní článek:
Tato část byla přesunuta na samostatnou stránku, protože se na ni v diskusích na fóru často odkazuje.
Uspořádejte si své plány
Předtím, než se pustíte do psaní, zvažte, co chcete psaním operačního systému získat. Jaké jsou vaše motivace k tomu, abyste se tohoto projektu ujali? Existuje mnoho možných důvodů, proč se pustit do projektu hobby operačního systému, a většina os-deverů má více než jeden. I pouhé konstatování „prostě chci“ může stačit, i když čím více budete zvažovat a ujasňovat si své cíle a motivy, tím více se můžete zaměřit na to, co skutečně chcete.
Buďte upřímní i sami k sobě. Není ostuda mít v rámci projektu větší ambice, i když (nebo zejména) nejsou hlavním cílem. Zkuste si přiznat všechny své cíle, nejen ten, který považujete za hlavní.
Zkuste se dohodnout, které aspekty návrhu OS vás nejvíce zajímají nebo na kterých vidíte potřebu pracovat. Většina toho, co se věnuje vývoji OS, zejména na začátku, je návrh a vývoj jádra, ale samotné jádro je jen malou částí většiny operačních systémů; pokud je vaším hlavním zájmem UX, síťování nebo programování ovladačů, měli byste se zamyslet nad tím, zda opravdu potřebujete (nyní nebo v budoucnu) vůbec psát vlastní OS, nebo zda byste byli stejně spokojeni s vývojem těchto věcí na existujícím jádře. Více než pár lidí se pustilo do vývoje OS, i když ve skutečnosti chtěli navrhnout desktopové prostředí, takže je to velmi důležitá otázka, kterou si musíte položit.
Zkuste se zamyslet nad nějakými projekty, které se netýkají OS a které byste chtěli realizovat nejdříve nebo současně, zejména nad takovými, které by mohly sloužit jako praxe nebo příprava na projekt OS. Obvykle není nutné pracovat na projektu OS hned, a čím více se připravíte dopředu, tím lépe na tom budete (alespoň do určité míry – příprava je jedna věc, prokrastinace je něco jiného).
Podobně, pokud máte v úmyslu pracovat na forkování existujícího projektu, se kterým chcete experimentovat, nebo jej upravit pro nějaký konkrétní účel, zaměřte se spíše na něj než na obecné otázky vývoje. Zvažte, které části stávající kódové základny budete potřebovat a které chcete změnit.
Zkuste si rozpracovat některé konkrétní cíle projektu a buďte připraveni naplánovat samostatné projekty, pokud vám to pomůže. Pokud máte v úmyslu se v tom prostě vrtat a sledovat, kam vás to zavede, je to v pořádku; pokud je vaším záměrem svrhnout Microsoft, je to také v pořádku (i když pravděpodobně nereálné). Jakmile víte, co chcete dělat, můžete si rozdělit podrobnosti do konkrétních cílů a zjistit, co by bylo potřeba k jejich dosažení. Nesnažte se do jednoho projektu vtěsnat příliš mnoho odlišných cílů – pokud chcete vyzkoušet různé věci s protichůdnými cíli, rozdělte je do různých projektů.
Možná vám pomůže, když sepíšete přehled plánovaného návrhu operačního systému s konkrétními požadavky nebo detaily, které považujete za pozoruhodné nebo které by mohly objasnit, s čím potřebujete pomoci, a přidáte ho do veřejného úložiště, pokud můžete. Nejenže to ostatním usnadní pomoc, ale pomůže to uspořádat a stabilizovat vaše plány, podobně jako když píšete osnovu příběhu nebo referátu. Buďte připraveni jej udržovat podle toho, jak se budou vaše cíle a plány měnit, ale uchovávejte si kopie starších verzí (nebo ještě lépe, mějte dokument pod kontrolou verzí), abyste mohli sledovat, jak se vaše práce v průběhu času vyvíjí.
Nakonec zkontrolujte čas a zdroje, které bude projekt vyžadovat, a rozhodněte, zda jsou proveditelné. Pokud víte, že máte jen určitý čas, který můžete projektu věnovat, vezměte to v úvahu, a ať už uděláte cokoli, nezavazujte se k vnějšímu termínu, i když jste si jisti, že ho můžete dosáhnout. Vývoj operačního systému vyžaduje čas – hodně času – a snažit se dokončit celý projekt operačního systému za semestr není reálné.
Výběr vývojového prostředí
Potřebujete platformu, na které budete nový systém vyvíjet. V souladu s obecnými trendy ve výpočetní technice je nejoblíbenější GNU/Linux, ale mnozí používají i Windows. Vývojáři používající systém GNU/Linux mají mírnou výhodu v dostupnosti nástrojů, ale to lze vyřešit i ve Windows pomocí systému, jako je Cygwin nebo MinGW.
- Binutils:
- GCC: Základní nástroje pro manipulaci s objektovými soubory: GNU Compiler Collection. GCC obsahuje mimo jiné kompilátory pro jazyky C, C++, Fortran a Ada.
- Make: Slouží k automatizaci procesu sestavování, což se stává opravdu užitečným, jakmile máte více než hrstku souborů.
- Grep a sed:
- Diffutils: Pro výkonnější vyhledávání a hledání a nahrazování (užitečné při vyplňování tabulek daty):
- Perl nebo Python: Neuvěřitelně užitečné pro zobrazení rozdílů mezi dvěma soubory: Jeden z těchto dvou skriptovacích jazyků by měl být nainstalován. Užitečné mimo jiné pro manipulaci s řetězci. Dříve se doporučoval Perl, ale Python je nyní poměrně vyspělý a je možná snazší se ho naučit. Oba mají k dispozici stovky balíčků/modulů pro provádění různých úloh.
- Asembler: Například NASM nebo GAS. To se liší v závislosti na cílové architektuře procesoru.
- Editor:
Všechny tyto nástroje možná nevyužijete, ale nejlepší je mít je po ruce „pro všechny případy“ a umět je používat i na základní úrovni. Pokud jste se však rozhodli používat jiný jazyk, pak je výběr nástrojů většinou na vás a možná vám výše uvedený seznam prostě nijak nepomůže. Níže jsou uvedeny informace týkající se především vývojářů v jazyce C/C++ nebo Assembly.
GNU/Linux
Nejvíce doporučovaným systémem pro vývoj OS je GNU/Linux. Při použití GNU/Linuxu je již pravděpodobně k dispozici většina vývojových nástrojů GNU. Pokud ne, použijte k jejich instalaci podle potřeby nástroje pro správu balíčků vaší distribuce (APT, RPM, Portage, Pacman, Apk atd.). Opět je nutné vytvořit křížový kompilátor, aby nedošlo k propojení v běhových souborech vývojového systému.
Běžnými editory jsou Vim, Emacs, KDevelop, Komodo Edit atd. Někteří místo IDE dávají přednost lehkým editorům, jako jsou gedit, Geany a SciTE. Mnozí mají rádi Midnight Commander, který má textové uživatelské rozhraní a vestavěný editor (mcedit), a proto je extrémně lehký a bleskurychlý.
O tom, které distribuce byste měli používat, se podívejte do seznamu linuxových distribucí. Vyšly ve všech možných podobách a velikostech a ne všechny se hodí pro vývoj jádra. Nepoužívejte distribuce, které mají specifický cíl, jako je bezpečnost (Kali, Qubes, BackTrack, Parrot atd.), vědecké aplikace (např. Scientific), firewally a směrování (např. DD-WRT), obnova systému nebo vestavěná prostředí (Knoppix, Rescatux, TinyCore) nebo jsou specificky zaměřené na začátečníky (jako Linux Mint, Nitrux atd.) I když by Linux přátelský k začátečníkům mohl stačit, vyberte si takovou distribuci, která je univerzální. Použijte také distro, které má aktuální balíčky, nejlépe vyberte takové, které používá rolling-release. Debian je snadno použitelný, ale často se dodává ve starých a záplatovaných verzích (nástroje se nemusí chovat podle popisu). Mnoho začátečníků má rádo Ubuntu, což je v pořádku, ale uvádí se, že má problémy s některými řetězci nástrojů a kompilačními prostředími (pokud si zkompilujete vlastní křížový kompilátor místo použití nainstalovaného, je to bezproblémové).
Nejlepší distribuce pro vývoj jádra jsou (ale mějte na paměti, že je to také věc osobního vkusu, takže tyto distribuce nejsou povinné spíše doporučené a obvykle vyžadují určité zkušenosti): Arch, Gentoo, Solus, Slackware, void atd. i Puppy.
Pokud si nejste jisti, zkuste Ubuntu nebo Manjaro.
Windows
Pro získání potřebných nástrojů byste si měli nainstalovat prostředí Cygwin. Alternativami jsou MinGW nebo DJGPP, ale důrazně doporučujeme MSYS2, protože je to nejkomplexnější a nejkompatibilnější prostředí a obsahuje také správce balíčků pro instalaci knihoven a nástrojů.
Microsoft nedávno (v době psaní tohoto článku) uvolnil subsystém Windows pro Linux jako volitelnou funkci pro Windows 10. V současné době je k dispozici pouze jeden balíček. Jedná se v podstatě o skutečnou distribuci Ubuntu s příkazovým řádkem běžící nad systémem Windows BEZ použití virtuálního počítače. Nejnovější verze GCC a Binutils (6.1.0 a 2.27) se v tomto prostředí kompilují a fungují správně. Pomocí shellu Bash můžete přistupovat k pevným diskům Windows prostřednictvím /mnt/<písmeno disku>. Výhodou tohoto řešení je, že můžete pracovat s libovolnými nástroji systému Windows nebo Linuxu, které potřebujete, aniž byste museli zjišťovat, zda fungují v prostředí Cygwin. Mnoho potřebných nástrojů lze nainstalovat pomocí „apt-get“.
Ve všech výše uvedených případech se důrazně doporučuje sestavit křížový kompilátor, a to nejen proto, že výchozí kompilátory se zaměřují na různé formáty spustitelných souborů, ale protože je to obecně dobrý nápad. Podrobnosti a pokyny najdete na stránce Křížový kompilátor GCC.
Budete také potřebovat editor. Použití Poznámkového bloku bude fungovat, ale je jednodušší, pokud máte plnohodnotnější editor. Mnoho lidí používá například Notepad++ nebo Notepad2. Pokud vám vyhovují unixové editory, můžete si vybrat některý z nabídky, kterou poskytuje Cygwin (zahrnuje například Vim a Emacs, na které je třeba si zvyknout, ale jsou velmi výkonné).
K psaní a kompilaci operačního systému je možné použít také Visual Studio nebo volně stažitelnou verzi Visual C++ Express Edition. Budete potřebovat speciální konfigurační soubor a budete jistě v menšině, ale funguje to docela dobře. Dokonce si můžete navrch nainstalovat sadu Windows SDK, která umožňuje 64bitový vývoj. Jediným úskalím je, že nepodporuje Inline Assembly.
Lze použít i jiné nástroje, například Watcom nebo Borland, ale každý z nich má své vlastní specifické požadavky a pro tento druh práce se příliš nepoužívá.
MacOS
Protože pod kapotou používá uživatelský prostor FreeBSD, je plně kompatibilní s POSIX. K dispozici jsou všechny obvyklé nástroje (vi, bash, dd, cat, sed, tar, cpio atd.) Téměř každý návod funguje out-of-the-box. Chybějící nástroje se většinou týkají souborového systému: chybí loopback device, fdisk, mkfs.vfat ani mtools. K těmto účelům ale můžete použít diskutil, případně tyto chybějící nástroje nainstalovat pomocí brew nebo macports.
Pro získání gcc jste museli mít na 2. instalačním DVD mpkg pro starší verze. Novější verze MacOS (10.13 a vyšší) mohou nainstalovat XCode z příkazového řádku (ne IDE, pouze sadu nástrojů) příkazem „xcode-select –install“ z Terminálu. Tím nainstalujete gcc, binutils a make. Toto gcc je vlastně masquaraded CLang, ale dostatečně funkční, abyste si mohli bez problémů sestavit vlastní křížový kompilátor. Je vhodnější použít oficiální kompilátor pro zavádění gcc než instalovat kompilátor z brew nebo macports.
Testování operačního systému
Hlavní článek: Výše uvedený článek se podrobně zabývá výběrem způsobu testování operačního systému a jeho začleněním do procesu vývoje. Pojednává o fyzických i emulovaných testovacích prostředích.
Ochrana vašeho kódu
Při tvorbě kódu napíšete stovky, dokonce tisíce řádků kódu. Strávíte nepředstavitelný počet hodin a budete sedět dlouho do noci a kódovat, i když byste měli jít opravdu spát. Poslední věc, kterou potřebujete, je havárie disku nebo špatně napsaný příkaz ‚rm‘ nebo ‚format‘, který zahodí veškerou vaši práci.
To, co potřebujete, je systém správy verzí. Systém CVS se používá již řadu let, ale v poslední době má velkou konkurenci v podobě systémů Subversion, Bazaar, Mercurial a Git. Pokud můžete, měli byste jako server pro správu verzí nastavit vzdálený počítač nebo server, ale pokud takový stroj nemáte k dispozici, můžete systém pro správu verzí hostovat i na místním vývojovém počítači. Jen nezapomeňte jednou za čas zálohovat kód na CD nebo FTP.
Tento bod nemůžeme dostatečně zdůraznit: pokud ještě nepoužíváte správu zdrojových kódů, měli byste s tím začít okamžitě. Stačí, abyste jednou udělali vážnou chybu ve svém kódu, abyste si uvědomili, jak je důležité mít kód bezpečně verzovaný a snadno obnovitelný. I když se to pro malý soukromý hobby projekt může zdát jako přehnané, jakmile si na používání kontroly revizí zvyknete, budete se divit, jak jste se bez ní kdy obešli.
Pro systém Git si můžete vytvořit projekt na GitHubu. Bitbucket je také dobrou alternativou, protože podporuje jak Git, tak Mercurial. V obou případech jsou k dispozici bezplatné soukromé repozitáře.
Další výhodou používání správy verzí v síťově přístupném repozitáři je, že je mnohem snazší spolupracovat s ostatními a získat od nich pomoc. To může být docela užitečné, zejména ve fórech, protože se tak můžete vyhnout nutnosti neustále zveřejňovat aktualizované verze svého kódu ve vlákně zpráv – jednoduše nasměrujete konverzaci na své úložiště a ostatní ve vlákně budou mít přímý přístup k vašim nejaktuálnějším změnám. Je to také velmi důležité, pokud s růstem projektu začnete na projektu spolupracovat s dalšími vývojáři (jen nečekejte, že se tak stane ze dne na den).
Společné výchozí body
Nejjednodušší způsob, jak rozjet jádro „hello world“, je výukový program Bare Bones. Jiným přístupem by bylo naučit se, jak se spouští samotný počítač, na stránce Boot Sequence.
K dispozici je také mnoho dalších tutoriálů.
Získávání dalších znalostí
Na internetu je dnes k dispozici úžasné množství znalostí o vývoji operačních systémů. Jde jen o to je najít. Především je tu samotná tato wiki. Mimo jiné zde máme spoustu tutoriálů. Když už jste tady, pravděpodobně jste je už našli. Na této stránce se také nachází fórum, kde se pohybuje mnoho vývojářů, kteří vám mohou pomoci (nejprve si ale nezapomeňte přečíst Jak klást otázky). O vývoji operačních systémů bylo napsáno poměrně dost knih. Řada z nich je uvedena na naší stránce Knihy a další také na osdever.net.
Napsat komentář