Go Wiki: Go on Plan 9

はじめに

Go の実験的な移植版が、ベル研究所のPlan 9 オペレーティングシステムで利用可能です。

対応アーキテクチャ

GoのPlan 9への移植版は、以下のアーキテクチャで利用可能です。

  • 386
  • amd64
  • arm

対応カーネル

現在のGoディストリビューションは、以下の環境で正常にテストされています。

要件

Plan 9でGoを実行するには、以下のシステムコールを提供するカーネルが必要です。

preadシステムコールに対する修正が必要です。これにより、ファイルを読み取る際にpreadがチャネルオフセットを更新しなくなります。

TCP接続制御ファイルは、「close」メッセージを処理し、リーダーをウェイクアップさせながらTCP接続を正常に閉じることができる必要があります。

wstat後にQid.versをインクリメントするためにFossilへの修正が必要です。これにより、truncateに続くreadがキャッシュされたコンテンツではなく、新しいファイルのコンテンツを返します。

GoogleSource、GitHubなどでホストされているリポジトリからソースをダウンロードできるように、X.509証明書のSHA-2署名サポートが必要です。

Raspberry PiでPlan 9を実行している場合は、Richard Miller氏の最新のbcmカーネルが必要です。

crypto/x509パッケージのCA証明書は、/sys/lib/tls/ca.pemにインストールする必要があります。https://curl.haxx.se/ca/cacert.pemからダウンロードするか、別のシステムからコピーできます。

9frontの場合、標準ライブラリのテスト用にループバックアドレスを設定する必要がある場合があります。

ip/ipconfig -P loopback /dev/null 127.1
ip/ipconfig -P loopback /dev/null ::1

インストール

GoはGoで書かれているため、Cで書かれたGoの最新リリースであるGo 1.4.3でGoをブートストラップすることをお勧めします。

しかし、Go 1.4のランタイムはPlan 9上で十分に成熟していなかったため、別のオペレーティングシステムを使用して、より新しいバージョンのGoからブートストラップすることをお勧めします。

Plan 9からのブートストラップ

まず、Go 1.4をインストールします。

cd /tmp
git clone -b go1.4.3 https://go.googlesource.com/go go1.4
cd go1.4/src
hget http://9legacy.org/go/patch/syscall-exec.diff | ape/patch -p2
make.rc

SMPが有効なマシンで実行している場合、syscall-execパッチが必要です。

次に、GOROOT_BOOTSTRAP環境変数を設定します。

GOROOT_BOOTSTRAP=/tmp/go1.4

最後に、Goの最新バージョンをインストールします。

cd /tmp
git clone https://go.googlesource.com/go
cd go/src
all.rc
bind -a /tmp/go/bin /bin

これでGoを使用する準備が整いました。

別のオペレーティングシステムからのブートストラップ

まず、Goのインストール手順に従って、このオペレーティングシステムにGoをインストールする必要があります。

次に、Plan 9用のGoツールチェーンをクロスコンパイルできます。

cd $GOROOT/src
GOOS=plan9 GOARCH=386 ./bootstrap.bash

その後、ブートストラップツールチェーンは../../go-plan9-386-bootstrap.tbzで利用可能になります。

最後に、このアーカイブをPlan 9マシンに展開できます。

cd /tmp
tar xzf go-plan9-386-bootstrap.tbz
bind -a /tmp/go-plan9-386-bootstrap/bin /bin

これでGoを使用する準備が整いました。

GOROOT_BOOTSTRAP環境変数を設定することで、このGoのインストールを使用して将来のGoリリースをブートストラップできます。

GOROOT_BOOTSTRAP=/tmp/go-plan9-386-bootstrap

バイナリからのブートストラップ

plan9/386用のバイナリパッケージが利用可能です。

このバイナリパッケージは、plan9/386ビルダー上でGoをブートストラップするために使用されます。

cd /tmp
hget -o gobootstrap-plan9-386.tar.gz https://storage.googleapis.com/go-builder-data/gobootstrap-plan9-386.tar.gz
mkdir gobootstrap-plan9-386
cd  gobootstrap-plan9-386
tar xzf ../gobootstrap-plan9-386.tar.gz

GOROOT_BOOTSTRAP環境変数を設定することで、このGoのバイナリパッケージを使用してGoをブートストラップできます。

GOROOT_BOOTSTRAP=/tmp/gobootstrap-plan9-386

その他のバイナリパッケージはこちらこちらで利用可能です。

Git

GitはPlan 9では利用できません。ただし、シンプルなrcスクリプトとしてGitラッパーが利用可能です。goツールを使用するために必要なものがすべて含まれています。

ビルダー

現在、3つのPlan 9ビルダーが稼働しており、その結果をGoダッシュボードに報告しています。

  • plan9-386は、仮想マシン上でベル研究所のPlan 9 (386カーネル) を実行しています。
  • plan9-amd64-9frontは、仮想マシン上でベル研究所のPlan 9 (amd64カーネル) を実行しています。
  • plan9-armは、Raspberry Pi 3上でベル研究所のPlan 9 (armカーネル) を実行しています。

現状

GoのPlan 9への移植版は実験的なものであり、まだ開発途中です。Goイシュートラッカーには既知の問題がいくつかあります。

課題

Goイシュートラッカーでは、OS-Plan9ラベルが付けられた多くの問題が現在オープンになっています。

ヘルプ

GoのPlan 9への移植版はコミュニティ主導の移植版です。Plan 9上でのGoの移植版の改善へのあらゆるご協力に深く感謝いたします。

メンテナー

多くの人々がGoのPlan 9への移植版に貢献してきました。2013年12月以降、GoのPlan 9への移植版はDavid du Colombierによってメンテナンスされています。

トリビア

Goの3人の主要デザイナーのうち2人がベル研究所でPlan 9に取り組んでいたため、Goの多くの部分はPlan 9システムに直接影響を受けています。これらの関連性のいくつかをご紹介します。

  • Gopherは、Plan 9のバニーであるGlendaもデザインしたRenée Frenchによってデザインされました。
  • このリポジトリでホストされているGcコンパイラは、Plan 9スタイルのローダーを使用しています。
  • GoのアセンブラはPlan 9の構文に基づいています。Go 1.xのスタックベースのABIはPlan 9から借用されています。
  • 推奨されませんが、元の標準ライブラリがPlan 9のlibcに由来していたため、Plan 9 Cのサポートもありました。自己ホスティング設計ドキュメントでこの歴史について言及されています。

このコンテンツはGo Wikiの一部です。