Toaruosは、X86-64 PCの「完全な」オペレーティングシステムであり、ARMV8の実験的サポートです。
多くの独立した、趣味、および研究OSは新しいデザインの実験を目的としていますが、Toaruosは教育リソースとして意図されており、主要なデスクトップオペレーティングシステムに見られる機能の代表的な縮図を提供します。
OSには、カーネル、ブートローダー、ダイナミック共有オブジェクトリンカー、C標準ライブラリ、独自の複合ウィンドウシステム、ダイナミックバイトコードコンパイルされたプログラミング言語、高度なコードエディター、および他の多数のユーティリティと例のアプリケーションが含まれます。
外部ランタイムの依存関係はなく、必要なすべてのソースコードは、合計で約1万1行の(主に)Cがこのリポジトリに含まれています。
ToaruosのUIといくつかのアプリケーションのデモンストレーション。
私は10年以上にわたってToaruosに取り組んできましたが、私の目標は長年にわたって変わりました。
私が2010年12月にプロジェクトを初めて開始したとき、私の目的は「やることによって学ぶ」ことでした - ゼロからそれを作ることによってUnixのようなシステムを勉強します。私は、数年前のX11の最初の広く使用されている合成ウィンドウマネージャーの1つであるCompizの貢献者でした。
2015年のオリジナルの1.0リリースでは、Toaruosはそれ以来「完全にゼロから」OSではありませんでした。 NewlibはLIBCを提供し、GUIはCairo、Libpng、およびFreetypeに建設されました。 2018年半ばに、これらのサードパーティコンポーネントを置き換える新しいプロジェクトを開始しました。これは最終的に完了し、Toaruos 1.6に統合されました。
プロジェクトを通じて、Toaruosは、参照として使用しようとしたかなりの数の初心者OS開発者を惹きつけました。しかし、Toaruosのカーネルは私にとって個人的な恥ずかしさの源であり、2021年4月、長い休みの後、私は新しいものに取り組み始めました。その結果、MISAKA:新しい64ビット、SMP対応カーネル。ミサカは5月に統合され、Toaruos 2.0に至るまでの1.99シリーズのベータリリースを開始しました。
dlopen 。現在、次のプロジェクトが進行中です。
SourceからToaruosを構築することを望んでいる一般ユーザーは、GithubのリポジトリをForkし、GitHub CIパイプラインを使用することをお勧めします。
Dockerを使用して適切に構成されたLinuxホストでローカルに構築したい場合は、ビルドコンテナが利用できます。 Toaruosリポジトリは/root/misakaおよびutil/build-in-docker.shこのコンテナ内で実行して、コンパイルプロセスを完了するために、バインドマウントとして使用する必要があります。
git clone https://github.com/klange/toaruos
cd toaruos
git submodule update --init kuroko
docker pull toaruos/build-tools:1.99.x
docker run -v `pwd`:/root/misaka -w /root/misaka -e LANG=C.UTF-8 -t toaruos/build-tools:1.99.x util/build-in-docker.sh
このように構築した後、さまざまなユーティリティ目標( make runなど)を実行できます。 make shellて、QEMUのシリアルポートを使用してToaruosシェルを実行してください。
Makefile 、 #includeディレクティブに基づいて依存関係を自動的に解決し、ユーザースペースのアプリケーションとライブラリに追加のメイクファイルを生成するために、kurokoツールであるauto-dep.krkを使用しています。
不確定な順序で、Cライブラリ、カーネル、ユーザースペースライブラレ、アプリケーションが構築され、Ramdiskとして使用するための圧縮アーカイブに組み合わされ、ISO9660ファイルシステムイメージにパッケージ化されます。
base/usr/includeのCヘッダー、およびコンポジタと窓のデコレーターのグラフィカルリソースを含む。ルートファイルシステムは次のように設定されています。
bin :ファーストパーティアプリケーション。cdrom :利用可能な場合は、CDのマウントポイント。dev :カーネルによって生成された仮想デバイスディレクトリ。net :ネットワークインターフェイスデバイス。pex :Packet Exchange Hub、アクセス可能なIPCサービスをリストします。pts :Pty Secondary、TTYSのエンドポイント。etc :構成ファイル、起動スクリプト。home :ユーザーディレクトリ。lib :ファーストパーティライブラリkuroko :黒子モジュール。mod :ロード可能なカーネルモジュール。proc :カーネル状態を提示する仮想ファイル。1など:個々のプロセスのステータス情報を備えた仮想ファイル。src :ソースファイル、上記の「プロジェクトレイアウト」セクションを参照してください。tmp :通常、読み取り/書き込みTMPFSとして取り付けられています。usr :ユーザースペースリソースbin :サードパーティのアプリケーション、通常はパッケージがインストールされるまで空になります。include :サードパーティパッケージの潜在的なファイルを含むヘッダーファイル。lib :サードパーティライブラリ。デフォルトではlibgcc_s.soが必要です。share :さまざまなリソース。bim :テキストエディターの構文の強調表示とテーマ。cursor :マウスカーソルスプライト。fonts :TrueTypeフォントファイル。 Deja Vu SansとともにライブCDSシップ。games :Doom Wadsのようなゲーム関連のリソースファイルのダンプグラウンド。help :ヘルプブラウザーアプリケーション用のドキュメントファイル。icons :PNGアイコン、サイズごとにさらにディレクトリに分割されます。ttk :ウィンドウデコレーターとウィジェットライブラリのスプライトシートリソース。wallpapers :jpeg壁紙。var :パッケージマネージャーマニフェストキャッシュ、PIDファイル、いくつかのロックファイルなどを含むランタイムファイル。 The best end-user experience with ToaruOS will be had in either of these virtual machines, as ToaruOS has support for their automatic display sizing and absolute mouse positioning.
「他の」64ビットゲスト用の新しいVMをセットアップし、少なくとも1gibのRAMを供給し、CD画像を取り付け、ハードディスクを削除または無視し、Intel Gigabit NICを選択します。 2つ以上のCPUも推奨されます。
virtualboxで実行されているtoaruos。
VMwareワークステーションプレーヤーで実行されているToaruos。
デフォルトでは、ブートローダーは、実装にパフォーマンスオーバーヘッドがあるため、「Seamless」サポートを無効にするためにFlagをVirtualboxデバイスドライバーに渡します。シームレスモードを有効にするには、ブートローダーメニューを使用して、ブートする前に「VirtualBox Seamless」オプションを確認します。メニューには、この機能の問題が発生した場合、自動ゲストディスプレイサイジングを無効にするオプションもあります。
Toaruosのほとんどの開発は、QEMUで発生します。これは、ハードウェアで最も柔軟性と最高のデバッグエクスペリエンスを提供するためです。 Ubuntu 20.04ホストの推奨されるQEMUコマンドラインは次のとおりです。
qemu-system-x86_64 -enable-kvm -m 1G -device AC97 -cdrom image.iso -smp 2
-enable-kvm -accel hvmまたは-accel haxmをkvmなしで-ccel HVMまたは-accel haxmに置き換えるか、QEMUのTCGソフトウェアエミュレーションの下で試してみてください。
QEMUコマンドラインオプションは安定しておらず、これらのフラグは新しいバージョンで警告を発する可能性があることに注意してください。
オプション-M q35 、PIIXチップセットエミュレーションを新しいものに置き換えます。これは、SATA 1のIDEコントローラーを切り替えるという副作用を備えています。これにより、ToaruosがAHCIドライバーを完成させるまで、実行時に独自のCDを読むことができないことを犠牲にして、ブート時間が速くなる可能性があります。
Toaruosは、実際のハードウェアで正常にテストされています。ネイティブのBIOSまたはEFIローダーが機能しない場合は、Grubで起動してみてください。 Toaruosは「MultiBoot」および「MultiBoot 2」仕様に準拠しているため、次のようにmultibootまたはmultiboot2コマンドをロードできます。
multiboot2 /path/to/misaka-kernel root=/dev/ram0 migrate vid=auto start=live-session
module2 /path/to/ramdisk.igz
set gfxpayload=keep
ThinkPad T410でUSBスティックからネイティブに実行されるTOARUOS。
Toaruosのすべてのファーストパーティ部分は、BSDスタイルの寛容なライセンスであるイリノイ大学 / NCSAライセンスの条件の下で利用可能になります。特に指定されていない限り、これはこのリポジトリ内のすべてのファイルのオリジナルで唯一のライセンスです。ファイルに著作権ヘッダーがないからといって、このライセンスの下にないという意味ではありません。 Toaruosは教育的リファレンスとして意図されており、コードの使用をお勧めしますが、ライセンスの要件に従ってください。 NCSAライセンスに基づいてコードを再配布したり、コードを変更したり、他の条件(GPLや独自のライセンスなど)でそれを変更することができますが、ライセンスで指定された著作権通知を常に含める必要があり、ライセンスの全文(カップルの段落)をEnd-Usersに使用する必要があります。
Toaruosのほとんどは完全に自分で書かれていますが、MikeのオーディオサブシステムやDaleの文字列関数など、関連する他の著者を必ず含めてください。
KurokoやBIMなどのToaruosの一部のコンポーネントには、異なるが互換性のある用語があります。
Toaruosは、複数のGitホスティングサイトに定期的にミラーリングされます。
#toaruos on libera( irc.libera.chat )
個々のアプリケーションとライブラリは、 gccとbinutils引き込むリポジトリからbuild-essentialメタパッケージをインストールすることで構築できます。ソースは、このリポジトリと同様のレイアウトでライブCDの/srcディレクトリで入手でき、 auto-dep.krkユーティリティスクリプトも利用できます。
ラムディス、確定したカーネル、またはCD画像を構築するために、一部のコンポーネントは現在利用できません。特に、RamDisksのビルドスクリプトはまだPythonで記述されており、 tarfileモジュールとzlibサポートに依存しています。以前は、有能なコンパイラツールチェーンを使用して、Toaruos 1.xは独自のカーネル、ユーザースペース、ライブラリ、ブートローダーを構築し、MakeFileと同様の関数を実行するPythonスクリプトを介して、これらを機能するISO CD画像に変えることができました。
Toaruosは現在、適切なPOSIXシェルが不足して実装を行うため、ほとんどのポートを構築することはできません。これらはプロジェクトの最終的な目標です。
いいえ、まったくそうではありません。 ToaruosのどこにもLinuxのコードはありません。また、Linuxソースは参照資料として使用されませんでした。
Toaruosは完全に独立したプロジェクトであり、このリポジトリのすべてのコード - カーネル、ブートローダー、ライブラリ、アプリケーションを含むオペレーティングシステムのコードベース全体であり、10年間にわたって私と一握りの貢献者によって書かれたオリジナルです。 ToaruosがこのGitリポジトリを通じてBaremetalの「Hello World」に過ぎないときにさかのぼる完全なソース履歴。
Toaruosは、OSの機能の全範囲をカバーするという意味で完全です。「単なるカーネル」や「単なるユーザースペース」ではありません。
Toaruosは、「完了」という意味では完全ではありません。
私はソフトウェアを移植するのに十分なPOSIXインターフェイスをサポートすることを目指していますが、標準の厳格な実装はOSの主要な目標ではなく、完全なコンプライアンスは望ましくない場合さえあります。
Toaruosは個人的なプロジェクトであり、コミュニティプロジェクトではありません。コードの形式での貢献について事前に議論する必要があります。ただし、リポジトリの外でポートやその他の作業は、支援するのに最適な方法です。
また、Kurokoに貢献することで支援することもできます。これは、それが別のリポジトリとして保持されている理由の一部です。