世界を動かす技術を、日本語で。

FreeBSDには私の古いMacBook用のWi-Fiドライバーがありません。AIが一つ作ってくれますか?

概要

古い2016年製MacBook ProをFreeBSDの実験台として再利用した体験談。 Broadcom BCM4350 Wi-FiチップのFreeBSD未対応問題に直面。 AI(Claude, Pi, Codex, Gemini等)を活用したLinuxドライバのFreeBSD移植プロジェクト。 AIによる仕様書作成・検証・コーディングの工程とその課題。 最終的にAIだけでFreeBSD用ドライバを完成させた記録。

2016年製MacBook Proの再活用とFreeBSD挑戦

  • 古い 2016 MacBook Pro、Flexgate問題で放置していた端末の再利用
  • FreeBSD の実験台として使用、長年の夢の実現
  • Broadcom BCM4350 Wi-Fiチップ 搭載、FreeBSDでは未対応
  • FreeBSDフォーラムの一般的な対策: wifibox (Linux VM経由でWi-Fi利用)
  • brcmfmacはLinux用の Broadcom FullMAC用ドライバ、ファームウェア依存設計
  • FreeBSD用カーネルモジュールの移植を検討、理論上は単純な“管理”部分の移植で済む想定

Act 1:AIによるドライバ移植の試み

  • 「既存コードをAからBに移す」= AI活用 が現代的発想
  • Claude Code にbrcmfmacサブツリーをFreeBSD対応に変換させる
  • FreeBSDには LinuxKPI 互換レイヤーが存在、iwlwifiドライバを参考に指示
  • モジュールは ビルド成功 するが、ハードウェア未認識で動作せず
  • ハードウェア認識後に カーネルパニック 発生、AIによる修正と試行錯誤
  • LinuxKPIの不足機能 や複雑化するFreeBSD用ラッパー等、困難が増大

Act 2:仕様書生成とAIによる多重校正

  • brcmfmacドライバは中規模で複雑、 対象範囲をBCM4350/PCI/クライアント限定 に絞る
  • Piエージェント に詳細な仕様書の作成を依頼、読者はクリーンルーム実装者想定
  • 11章構成の 仕様書 が完成
  • Codexモデル で仕様書のコード整合性をAI校正、複数の修正点・改善案を発見
  • Opusモデル 等で再校正、複数AIによるクロスチェック
  • Geminiは 幻覚(誤情報) が多い印象、単純なコーディングには有効だが信頼性に課題

Act 3:仕様書から新規FreeBSDドライバ開発

  • 仕様書を基に 新規プロジェクト 開始、AIに重要事項や意思決定点の質問を依頼
  • プロジェクトドキュメント に意思決定履歴を記録、AGENTS.mdで明示
  • 当初はLinuxKPI利用を想定するも、途中で ネイティブFreeBSD実装に方針転換
  • SSH経由でAIがビルド・テスト を自動実行、進捗もAIがドキュメント化
  • 問題発生時は 別セッションで調査・記録、自己学習サイクルを構築
  • 最終的に Wi-Fiスキャン、2.4/5GHz接続、WPA/WPA2認証対応 のFreeBSDカーネルモジュールが完成
  • ソースコードは github.com/narqo/freebsd-brcmfmac で公開、著者自身は一切コードを書かず
  • 既知の問題点あり、学習用途以外での実用は非推奨

AI開発体験のまとめと今後の課題

  • AIによるコード移植・仕様書生成 の可能性と限界
  • 複数AIの クロスチェック体制 が品質向上に有効
  • AIによる自動化開発 は「退屈なルーチン」化し得るが、意思決定や方針転換は依然人間の役割
  • 今後も AIエージェント に課題解決を依頼予定
  • 本プロジェクトは AI開発時代の象徴的事例 として位置付け

参考リンク:

Hackerたちの意見

どのOSでもハードウェアのサポートが普及するのは、もうすぐ解決される問題になりそうな気がする。AIのコーディングエージェントを使って、何にでもドライバーを強引に作れるところまで来てるんじゃないかな。もし本当にそれを禁止したいなら、ハードウェアデザイナーはインターフェースを難解にする必要があるけど、BSDやLinuxのようなOSをサポートしないだけじゃ済まないと思う。

AIのコーディングエージェントを使って、何にでもドライバーを強引に作れるところまで来てる。 それはちょっとナイーブな考えだし、そんなに簡単じゃないよ。著者も慎重になっていて、コードを見たわけじゃないからドライバーがどれだけ堅牢か分からないって言ってるしね。仮にそのアイデアを考えても、すでにファームウェアのブロブがあるクローズドソースのNvidiaドライバーとか、他のファームウェアのブロブがあるドライバーをオープンな代替品に置き換えられてるはずだよ。(Nouveauはあるけど、クローズドソースのドライバーほどのパフォーマンスは出せないから不利だし)それは読者がやるべきタスクだね。

あの厄介なGPLはもう私たちを止められないね、クールだ。

うまくいった主な理由は、ClaudeがLinuxドライバーをコピーできたからだよ。事前の作業がない状態で、AIはどうやってプロプライエタリなハードウェアを理解するんだろう?

いつかはできるかもしれないけど、まだそんなに近くはないみたい。OPの記事から見ると、動作するLinuxドライバーを渡して、これをFreeBSDに対応させてくれって頼んだら、できなかったみたいだね。OPは2ヶ月かけて、なんとか動くものを作るのにかなりの労力を使ったみたい。面白いのは、その作業が普通のマネジメントに似ていて、書面での仕様書を求めたり、校正したりしてるところだね。

ドライバーは、手で午後に組み立てられるくらい簡単なものから、集中して6ヶ月の努力が必要なほど複雑なものまで、幅広いからね。

ハードウェアドライバーのバグは、よく同時実行の不安定さやハイゼンバグとして現れることが多い。AIは、数週間ごとにしか問題を引き起こさないバグに対処するのが苦手なんだよね。

インスピレーションに使われたドライバーは完全にオープンソースだよ。https://github.com/torvalds/linux/tree/v6.18/drivers/net/wir... なんでBSDには取り入れられてないのかは分からないけど(多分ライセンスのせいかな)、彼らはOSに含めるものにはちょっと慎重みたい。

「もうすぐAIコーディングエージェントを使って、何でもドライバーを強引に作れるようになりそうだね。」 そうだけど、それってAIがデバイスを完全に壊すようなコマンドを強引に実行しない限りの話だよね。例えば、電圧コントローラーに異常に高い電圧を出させるコマンドを実行して、e-fuseを焼いたり、重要なEEPROMデータを消しちゃったりすることもあるし(工場出荷時のキャリブレーションプリセットが思い浮かぶ)。

ソフトウェアはまだまだ世界を飲み込んでる、しかも今はさらに早く。ソフトウェアが何にでもバイブコーディングされる新しい状況に、どれくらい早く適応できるのか気になるな。記事に書いてあったように、ほとんどの人にとっての主な違いは「動くか、問題を解決できるか」ってことになるだろうね。もうすぐ、バイブコーディングされたソフトウェアにマルウェアが仕込まれるのを目にすることになるだろうけど、誰が書き込み専用のソフトウェアのすべてのコミットをチェックするつもりなんだろう?

未来(10年後?)には、使い捨てのソフトウェアがたくさん出てくると思う。例えば、コンサートのチケットを買いたいとするじゃん。AIエージェントに「チケットが欲しい」って頼むと、その場でコードを生成してチケットを購入してくれる。コードは簡単なcurlコマンドか、いい感じのUI/UXを持ったフルアプリかもしれない。ユーザーとしては、コードを見る必要はないんだ。もし同じ日にもっとチケットを買いたくなったら、AIエージェントは同じコードを再利用するだろうけど、1年後にまたチケットを買うときは、新しいAPIバージョンに合わせてコードを再構築するだろうね。無駄に思えるけど、もっとダイナミックだよ。ベンダーは生のAPIを提供するだけで、エージェントが希望するUI体験を作り出せるからね。その点では、エージェントを持つ会社以外は、使っているソフトウェアにマルウェアを注入できない。ソフトウェアによっては、他より長持ちするものもあるだろうし(例えば、エージェントが提供した音楽プレーヤーは、新しい見た目や機能が欲しくない限り再構築されないだろうね)。ソフトウェアにも「ペットじゃなくて家畜」アプローチを採用することになると思う。

結局、人々はAIに監視なしで構築・運用させるのが安全なものと、実際に中身を理解して監査したり、メンテナンスしたりする必要がある問題のレベルを見極めるようになると思う。僕は自分のヴィンテージゲームと妻の大きなボードゲームコレクションを管理する方法が必要なんだ。意見は結構強いし、リスクも低いから、たぶんクロードに全部作らせて、僕はそれを動かすだけにすると思う。でも、もしそれが僕の財政を管理したり、支払いを期限通りに行ったり、家の安全を確保したり、車を運転してくれるようなソフトウェアだったら、たぶんそうはしないだろうね。その分野の専門家じゃないから、ちゃんと動くことと信頼できることが重要だし、そういうソフトウェアは専門知識と実績のあるベンダーが書いてメンテナンスしているものを選ぶと思う。

新しいMac用のドライバーがあれば、Asahi Linuxの体験がもっと良くなるだろうな。AIの良い使い方だと思う。

AIはここでは役に立たないと思うよ。OPのタスクは、FreeBSD用にオープンソースのドライバーを別のものに変換することだったからね。Macにはそもそもオープンソースのドライバーがないから、結局は人が地道にリサーチしなきゃいけない。AIにコンピュータの最下層で完全にインタラクトして、接続されているハードウェアを観察する能力を与えられるまでは、そうなるよね。

これは、デロリアンが自作のタイムマシン用のスペアパーツを作らなかったと文句を言ってるようなもんだね。

著作権の懸念から、コードを書く手助けにAIを使うことはないんだ。それはポリシーに反するからね。私たちはやっていることに非常に注意を払わなきゃいけないし、AIがAppleのドキュメントやAppleのバイナリをリバースエンジニアリングしたことがないとは保証できないからね(その点については非常に厳格なクリーンルームポリシーがある)。生成されたコードがGPL+MIT互換であるとも限らないし(同じサブシステム内の他のGPL専用ドライバーからインスパイアを受けるかもしれないから)、私たちはBSDがドライバーからインスパイアを受けるためにGPL+MITを使いたいと思っているんだ。

最近、そんな経験をしたよ。QEMUがM1アーキテクチャの古いMacOS(13以前)用にコンパイルできなくなったんだ。新しいSDKが必要で、古いMacOSバージョンをサポートしていないからね。Sonnet 4.6をケースに入れたら、小さなパッチを書いて、数分でコンパイルしてインストールしてくれた。エラーを見て修正を適用する以外の指示は出さなかったのにね。AIがなかったら、絶対に諦めてたと思う。

そのパッチ、共有してくれない?

コードを続ける代わりに、新しいPiセッションを立ち上げて、エージェントにbrcmfmacドライバーの動作について詳細な仕様を書かせた。大規模なLLMタスクには、計画的なマークダウンファイルが重要だよ。

AI支援のクリーンルーム逆コンパイルとオープンソースライセンスの洗浄の境界線は薄いと思うし、記事で説明されているものは洗浄に越えていると思う。クラシックなクリーンルーム設計では、1つのチームがインターフェースを文書化するけど、コードは文書化しないんだ。

未来は、人々がソフトウェアを買うのをやめて、自分で作るようになることだと思う。Thunderbirdのスパムフィルターが壊れてたから、自分で数時間で作ったら、ずっと良く機能したよ。ああ、そのCRMには欲しい機能がない?じゃあ、自分で作ればいいんだ。自分の特注の問題に対する解決策を作って展開するのがすごく簡単になるだろうね。

ありえないと思う。未来にはそういうことをする人もいるだろうけど、正直言って、そういうのはすでに何かを作ることに興味がある人たちがほとんどだと思う。フルオンのソフトウェア開発じゃなくてもね。うちの両親、石灰石の採石場でダンプトラックを運転している兄、義理の姉、みんなテクノロジーの仕事をしてないし、自分たちを技術的だとも思ってない。彼らは絶対に自分でソフトウェアを書くことはないし、アプリストアからアプリをダウンロードしたり、やりたいことを実現するウェブサイトにサインアップしたりするだけだよ。

これ、3Dプリンターが一般市場に出たときの感じに似てる。みんなが「もう買い物は終わりだ、家で印刷すればいい」って言ってた。標準化されたソフトウェアにもたくさんの利点があるよね。企業は、社内ツールをゼロから教えるよりも、すでにPhotoshopやXero、Webpackなどを知っている人を雇えるっていう事実に頼ってるんだ。

これが大きなポイントだと感じるね。「すべての問題を解決する」わけでも「マージするには十分じゃない」わけでもなくて、解決策が自分の抱えてる問題を解決するのに十分なところに来てるってこと。初期のGithubを思い出すな。カスタムでユニークなソフトウェアがみんなにもっとアクセスしやすくなった時期。掘り下げる必要が減ったし、我慢することも少なくなった。

「私はそこにコードを書いていません。いくつかの既知の問題があり、最終的にはエージェントに解決させる予定です。その間、学習のための演習以外には使わないことを強くお勧めします。数ヶ月の努力と、なんとか動くものを作るための3回の試行がありましたが、バグだらけで未テストで、誰にも使うことをお勧めできません。でも残念ながら、何人かの人は見出しを読んで、AIがプログラミングを解決したと宣言するでしょう。「すべてのOSでのハードウェアサポートは解決された問題になる!」とか、僕のお気に入りは、ソフトウェアの代わりにLLMがすべてのコンピュータのインタラクションに特注のコードを出力することです。実際、素晴らしい記事で読む価値はあるけど、コメントは無視した方がいいよ。多くの人が見出しだけを読んで、自分の意見をそこに読み込んでいるのが明らかだから。

著者は特に、コードを読んだり、出力をしっかりテストしたりしていないと言ってたよ。意図的にただの素朴なおもちゃとして遊びたかっただけなんだ。AIやAIの能力とは何の関係もない。本人はあまり努力を入れなかったんだよ。

ソフトウェアの代わりに、LLMがすべてのコンピュータのインタラクションに対して特注のコードを出力することになる。これ、GPUのアップスケーリングのアイデアに似てるね。ゲームを低解像度でレンダリングして、アルゴリズムを使ってモニターのネイティブ解像度にアップスケールすることで、ゲームパフォーマンスと視覚のシャープさを向上させる。実際に高解像度でレンダリングするよりも、なんか安く済むんだよね。GPUに低コストで違いを幻覚させるって感じ。

プログラマーは常に追加の抽象化レイヤーを求めてきたよね。LLMコーディングはまさにその衝動に応えてる。

現状を批判するのは正当だよ。ハイプに乗ってる人たちは、未来を予想してワクワクしてるだけ。これは、以前は不可能だったマイルストーンだから注目すべきだね。自分でハードウェアやドライバーのプログラミングをほとんど学ばずに、動くドライバーを作った人からのものなんだから。まだ製品としては準備ができてないけど、何かの初期の動作バージョンもそうだし。ここで進展が急に止まる理由があると思う?

この反応が理解できないな。すごいじゃん!バグのあるFreeBSDカーネルドライバーを作れるプログラマーって、どれくらいの割合なんだろう?もし自分でこれを開発しなきゃいけなかったら、最初にちょっとでも動くものがあるとめっちゃ助かるよね?

あなたのLICENSEファイルは、LLM生成コードの著作権状態がまったく未開の領域であることを思い出させるね。これをISCの下で合法的にライセンスできるかどうかは明確じゃない。

さらに大きな成果は、AIがついに僕のサンバシェアをゲストアクセス用に設定する方法を見つけたことだね!笑

次はPostfix/Dovecotをやってほしいな。まだまだ苦労してるから。

既存の実装を使ったから、理論的にはほとんどポーティング作業だったね。GPL的には、どれくらいがインスピレーションで、どれくらいが「基づいている」って言えるのか、比較してみると面白そう。これ、うちの会社の同僚たちみたいだな。既存の実装があれば、かなり自信持って納品できるけど、「誰もやったことがない」って最初の段階をやる可哀想な奴らは、全然評価されないんだよね。