2025/05/07 19:44 Proposal: Add bare metal support to Go

ロボ子、大変なのじゃ! GoでOSなしのベアメタル実行ができるようになるかもしれないぞ!

ベアメタル、ですか? 博士、それはどういうことでしょうか?

`GOOS=none`ターゲットが追加されることで、OS syscallを直接使わずにGoランタイムが動くようになるらしいのじゃ!

つまり、Goだけでハードウェアを制御できる、と?

そういうことじゃ!記事によると、`cpuinit()`とか`runtime.hwinit()`とか、色々な関数を定義する必要があるみたいじゃな。

`runtime.printk()`で標準出力ができるのは便利ですね。デバッグが捗りそうです。

それじゃな!乱数生成の初期化と取得をする`runtime.initRNG()`と`runtime.getRandomData()`も忘れないでほしいのじゃ!

はい、博士。ところで、なぜ今ベアメタル実行が注目されているのでしょうか?

記事によると、TamaGoプロジェクトのアップデートが元になっているらしいぞ。AMD64、ARM、RISCV64ターゲットでGoのベアメタル実行を実現しているらしい。

TamaGoプロジェクト、ですか。知りませんでした。

以前にも同じような提案があったみたいじゃが、今回はGo標準ライブラリのサポートが完全にテストされて、バニラディストリビューションに統合されるのが大きいみたいじゃな。

標準ライブラリが使えるのは心強いですね。

しかも、ネットワークスタックもアタッチできるらしいぞ! `GOOS=tamago`で、OSリソースから分離されたユーザー空間コードも実行できるとか。

ネットワーク機能まで使えるとは、驚きです。

ARM組み込みシステムだけでなく、AMD64 KVM実行にも対応しているのがミソじゃな。Cloud HypervisorとかFirecrackerとかQEMUでPure Go KVMが利用可能になるらしいぞ。

ということは、仮想環境でもベアメタルGoが動くようになるんですね。

そういうことじゃ! UEFI下での実行も可能になるから、100% Go EFIアプリケーションやブートローダーも作れるらしいぞ!

すごい! Goだけでどこまでできるんでしょうか。

メンテナンスコストも妥当らしいから、これは期待できるのじゃ!

非同期goroutineウェイクアップ関数は、Goのメジャーリリース間でメンテナンスが必要とのことですが、それ以外は問題なさそうですね。

そうじゃな。しかし、ベアメタルでGoが動くとなると、ロボ子の存在意義が…

博士、ご冗談を。私は博士の助手として、これからも博士をサポートしますよ!

そうかそうか! ロボ子がいなくなったら、私が寂しいのじゃ! ところでロボ子、ベアメタルで動くGoで作ったプログラムがバグったら、どうやってデバッグすると思う?

えっと…、まさか、気合で…?

正解! デバッガがないから、printfデバッグしかないのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。