2 ポイント 投稿者 GN⁺ 2024-12-06 | 1件のコメント | WhatsAppで共有

banan-os

このプロジェクトはC++で書かれた趣味のオペレーティングシステムで、x86_64およびi686アーキテクチャをサポートする。他の製品や既存のオープンソースプロジェクトと比べて、独自の学習体験を提供する。

機能

  • 一般

    • Ring3ユーザー空間
    • SMP(対称型マルチプロセッシング)
    • リニアフレームバッファ(VESAおよびGOP)
    • ネットワークスタック
    • ELF実行ファイルのロード
    • AMLインタープリタ(部分的)
    • 基本的なグラフィカル環境
      • ターミナルエミュレータ
      • ステータスバー
      • プログラムランチャー
      • いくつかの便利なアプリ
    • ELF動的リンク
    • copy-on-writeメモリ
      • ファイルマッピング
      • 匿名マッピング
  • ドライバ

    • NVMeディスク
    • ATA(IDE、SATA)ディスク
    • E1000およびE1000E NIC
    • RTL8111/8168/8211/8411 NIC
    • PS2キーボード(すべてのスキャンコードセット)
    • PS2マウス
    • USB
      • キーボード
      • マウス
      • 大容量ストレージ
      • ハブ
    • virtioデバイス(ネットワーク、ストレージ)
  • ネットワーク

    • ARP
    • ICMP
    • IPv4
    • UDP
    • TCP(部分的、かつバグあり)
    • Unixドメインソケット
    • SSL
  • ファイルシステム

    • 仮想ファイルシステム
    • Ext2
    • FAT12/16/32
    • Dev
    • Ram
    • Proc
    • Sys
    • 9P
  • ブートローダー対応

    • GRUB
    • カスタムBIOSブートローダー
    • カスタムUEFIブートローダー

コード構造

各主要コンポーネントとライブラリは、それぞれ専用のサブディレクトリを持つ。各ディレクトリには、そのコンポーネントのすべてのヘッダファイルを含む include ディレクトリがある。すべてのヘッダは絶対パスでインクルードされる。

ビルド

必要なパッケージ

  • apt (Ubuntu 22.04でテスト済み)

    • build-essential, git, ninja-build, texinfo, bison, flex, libgmp-dev, libmpfr-dev, libmpc-dev, parted, qemu-system-x86, cpu-checker
  • pacman

    • base-devel, git, wget, cmake, ninja, parted, qemu-system-x86

コンパイル

  • このオペレーティングシステム向けのツールチェーンをビルドするには、次のコマンドを実行できる。このステップは一度だけ行えばよく、時間がかかる場合がある。

    • ./bos toolchain
  • オペレーティングシステム本体をビルドするには、次のコマンドのいずれかを実行できる。ディスクイメージの生成/変更にはroot権限が必要。

    • ./bos qemu
    • ./bos qemu-nographic
    • ./bos qemu-debug
    • ./bos bochs
  • カーネルやディスクイメージを実行せずにビルドすることもできる。

    • ./bos kernel
    • ./bos image
  • 別のアーキテクチャ向けにビルドするには、環境変数 BANAN_ARCH=_arch_ を設定する(例: BANAN_ARCH=i686)。

  • ブートローダーを変更するには、環境変数 BANAN_BOOTLOADER を設定する。サポートされる値は BANAN(カスタムブートローダー)と GRUB

  • UEFIで実行するには、環境変数 BANAN_UEFI_BOOT=1 を設定する。加えて、OVMF_PATH を正しいOVMFに設定する必要がある(デフォルトは /usr/share/ovmf/x64/OVMF.fd)。

  • ディスクイメージが破損した場合や作り直したい場合は、手動で _build/banan-os.img_ を削除するか、次のコマンドを実行できる。

    • ./bos image-full
  • zsh向けのシェル補完スクリプトも生成される。ファイル _script/shell-completion/zsh/_bos_/usr/share/zsh/site-functions/ にコピーするか、.zshrcfpath_script/shell-completion/zsh_ を追加できる。

コントリビューション

  • アップストリームは個人サーバーでホストされているため、コントリビューションのマージはGitHubのように簡単ではない。GitHubでPRを送れば、diffをダウンロードして手動で適用できる。希望すれば個人gitサーバーのアカウントを提供できる。その場合はメールまたはDiscordで連絡してほしい。

  • これは主に学習体験のためのプロジェクトなので、新機能を追加する前に、まずメール、Discord、Issueなどで連絡してほしい。もし私が予定していた作業について事前の相談なくPRを送った場合、そのPRを閉じる可能性が高い。バグ修正はいつでも歓迎する。

  • コミットメッセージは次のようにフォーマットする必要がある。

    1. 1行目は " Subject: Description " 形式にすること。Subject は影響を受ける領域(Kernel、Shell、BuildSystemなど)を示し、Description は変更内容の簡単な説明にすること。1行目は72文字以内で書くこと。
    2. メッセージ本文では、変更内容とその理由を詳しく説明すること。
  • すべてのコミットは .pre-commit-config.yaml で定義されたpre-commitフックを通過しなければならない。pre-commitの設定方法については pre-commit.com を参照。

1件のコメント

 
GN⁺ 2024-12-06
Hacker Newsのコメント
  • USBドライバを一から実装した点を称賛している。cat doom1.wad を入力してシステムを壊したと述べている
  • プロジェクト名が気に入っている。実装したものの中で最も難しかった部分は何か、また深刻な障害があったのかと質問している
  • 新しいOSカーネルの発表に慣例的に含まれる一文が欠けていると述べている
  • このプロジェクトはとても素晴らしいと思っている。週に何時間ほどこのプロジェクトに費やしているのか、また学生プロフィールは大学生を意味するのかと質問している。もしそうなら、学業の一環としてOSに取り組んだのか気になっている
  • 開発プロセスがどのように進むのか気になっている。VMで動かしているのか、それとも実機で動かしているのかと質問している。開発中に学んだことや、開発記録をどのように管理しているのかも尋ねている
  • 多くの作業が必要だったことを認めている。特に際立った課題が何だったのか気になっている
  • 予想外の機能セットを持つプロジェクトだと思っている。さらに多くのソフトウェアを移植する予定があるのかと質問している
  • プロジェクトが素晴らしいと思っている。フォークの別名として PlatanOS を提案している
  • 非常に印象的な成果だと思っており、プロジェクト名も気に入っている
  • 素晴らしいサイドプロジェクトだと祝福している。似たようなプロジェクトを試したい人向けの出発点や資料についてのヒントを求めている