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

Show HN: 見て、ママ、Linuxなしで: ESP32-S3 / BreezyBox上のシェル、アプリインストーラー、Vi、Cc

概要

  • BreezyBox はESP32-S3をPCライクに変身させる ミニシェル コンポーネント
  • エディタ、コンパイラ、アプリインストーラ を内蔵し、即起動PC体験を実現
  • Raspberry Pi のような使い方が可能だが、 サーバーOSの重さなし
  • 無線通信ANSIテキスト表示 もサポートし、レトロPCの雰囲気を再現
  • MITライセンス で公開、コミュニティによる拡張・貢献も歓迎

ESP32-S3向けBreezyBoxシェルデモの紹介

  • ESP32-S3マイコン を使い、超小型PC化を実現する デモプロジェクト

  • BreezyBox はESP-IDF用の ミニシェルコンポーネント、UNIX風コマンドやアプリインストーラを提供

  • Raspberry Pi のような体験を、 軽量かつ高速 に実現

  • サーバー/デスクトップOS のオーバーヘッドを排除した設計

  • 趣味の電子工作小型デバイス でのPC的な使い方を推進

    • サイバーデッキ風 のプロジェクトから発展
    • DOS時代PC のノスタルジーと、現代の無線通信機能を融合
    • コード肥大化 を回避し、 シンプルでエレガント な設計志向
    • vterm(仮想端末)カレントディレクトリ管理UNIX系コマンドアプリインストーラ を実装
    • elf_loader によるダイナミックリンク対応

BreezyBoxの特徴

  • BusyBox風 のコマンド群を提供するが、完全なクローンではない

  • ESP-IDFプロジェクト に1コマンドでインポート可能

  • FreeRTOS上で動作、OSではなくユーザーランドレイヤー

  • vterm/vfs機能 と一部のシェルコマンドを主に提供

  • ディスプレイやボード設定 は各ユーザーのファームウェア側で対応

    • Waveshare ESP32-S3-Touch-LCD-7B 向けのデモ例を提供
    • 他のボードやディスプレイにも コードスニペット流用 で簡単に適応可能

利用方法・導入ガイド

  • リポジトリをフォーク&クローン し、自分のボードで動作テスト
  • 40ユーロ程度 の開発ボードや、 10ドル前後の小型LCD搭載S3ボード でも利用可能
  • LVGLのテキストラベル でLCDへのstdout出力が簡単
  • ヘッドレスボード+USBコンソール でも動作、VSCodeやTabbyでANSIコード対応
  • 独自フォントレンダラ は不要(高速化目的の場合のみ実装)

ライセンス・コントリビューション

  • MITライセンス のフリーソフトウェア

  • テスト・サンプル提供・新ユースケース提案 など、コミュニティ貢献を歓迎

    • ELFアプリ の追加(breezyappsリポジトリ参照)
    • プラットフォーム依存コードなし のCプログラムも動作可能(要メモリ・PSRAM対応検証)
    • 独自リポジトリからのアプリ公開・インストール が可能
    • 様々な開発ボード・スタイル でのサンプルファームウェアも歓迎
    • C++対応、GUI化、レトロゲーム移植、周辺機器連携 なども拡張例
    • 他CPU(RISC-V等)への移植サイバーデッキ自作 も推奨

追加情報・デモ・参考リンク

  • 公式デモリポジトリbreezydemo

  • ESP-IDF用BreezyBoxコンポーネントbreezybox

  • Hackaday掲載記事Hackaday

  • Hackster.io記事Hackster.io

  • Reddit投稿Reddit

    • Raspberry Pi的な使い方 が可能だが、サーバーOS不要
    • DOS時代のコーディング体験 を再現
    • 高速テキストモードドライバ を独自実装、今後はVGA風グラフィックも追加予定
    • ANSIテキストデモアプリインストール もスムーズ
    • 任意リポジトリからのアプリインストール が可能、承認や待機不要

まとめ

  • BreezyBox はESP32-S3の可能性を最大限に引き出す 軽量シェル環境
  • 電子工作・レトロPC好き小型PC開発者 に最適
  • 自由な拡張・コミュニティ貢献 が可能なオープンプロジェクト

Hackerたちの意見

rp2350で動かせるように移植できるかな?

いくつかの部分は、たぶんそうだね。シェルはただのlinenoiseにちょっとしたグルーコードを加えたものだよ。rp2350でのELFの読み込みはどうなってるか、確認してないんだ。できるかもしれないけど、どれだけの労力がかかるかが問題だね。ESP-IDFでは今や標準コンポーネントになってるよ。

rp2350はfreertosをサポートしてるから、似たようなポートは簡単にできそうだね。PicoのIO DMAコードはちょっと特別だけど、すごく優秀なチップだよ。=3

フラットメモリモデルがないと、一般的なOSを作るのが難しいんじゃない?アミガ1000は処理能力がずっと低かったけど、メモリは同じくらいでMMUもなかったけど、メモリモデルはフラットだったよね。何か変なことしないといけなかったの?

この問題についてもう少し詳しく教えてもらえる?MCUにはまだあまり詳しくないんだ。

メモリモデルは十分フラットだよ。ただ、メモリの問題は、伝統的なRAMが約200kBしかないこと。だけど、8MBのPSRAMがあるんだ。でも、厳密に4バイトのアラインメントが必要で、かなり遅い。伝統的なOSがこのプラットフォームで難しいのは、メモリ保護がないからなんだ。でも、俺はシンプルな人間だから、OSを書くつもりはなくて、使えるシェルとアプリインストーラーが欲しかっただけなんだ。それを実現したよ。

SoC上で一般的なOSが難しい理由は、ハードウェアの仮想RAMアドレス変換アクセラレーター、つまりMMUがないことが多いからなんだ。開発者が生のポインタにアクセスできないなら、それほど重要じゃないかもしれないけど、オブジェクトが動的にどこにでも割り当てられるからね(Java!!! あとJavaScriptや他の解釈型言語も)。でも基本的に、デスクトップOSのアプリはCで書かれていて、常に一貫した仮想アドレスが必要だから、ハードウェアの動的変換がないとアプリは動かないんだ。

インスタントオンってめっちゃクールだよね。こういうプロジェクトやAdafruitのFruit Jamを見るのが好きなんだ。ほんと「いろいろなものが邪魔になって、いくつかのものを失ってるよね」って感じがする。こういうのは子供の初めてのコンピュータとして絶対に渡したい。

Aliexpressで$20のノートパソコンがこれを動かすのを楽しみにしてるよ!

おお、君がxcc700の人だ!めっちゃクールなことやってるね。最近、一般的な計算にMCUを使うことに興味があるんだけど、どこまで押し進められるかな。

そうそう、xcc700デモで使われているシェルについてみんなが聞いてたから、それも今リリースされたし、再利用しやすいように便利に作ろうとしたんだ。Esp32-s3はもっといろいろできるし、まだ表面をなぞってるだけだよ。FabGLを覚えてるかもしれないけど、あれはゲームやDOSエミュレーションの領域でいいデモをいくつか動かしてたよね。残念ながら、現代のESP-IDFのバージョンに更新するのが難しいみたいだ。もっとモジュール化されたものを作ろうとしてるんだけど、いくつかの部分が長く生き残ってくれることを願ってる。昔のMacOSをシミュレートして動かした人もいたみたいで、それも一般的な能力の指標だね。

来週末はこれやるつもりだな…別のプロジェクトのためにesp32-s3を買うつもりだったけど、今は2つ必要になっちゃった…

ほんと安いよ、ついでにesp32-c6もゲットしときなよ。

これがBreezyboxとの出会いで、めっちゃワクワクしてる!なんでか知らないけど、Wifiの設定やアップデートに気を使わなきゃいけないのが嫌だな。アプリケーションを書くだけでいいのに。シンプルなマイコンOSがあればいいのにってずっと思ってた。これがその基盤になりそうだね(もしかしたらそれだけで十分かも)。ヘッドレスデプロイメントのための良いセットアップフローはあるのかな?(例えば、フラッシュ中にWifi設定を供給したり、アプリをデプロイするためのリモートシェルアクセスやWeb UIがあったりするのかな?)

BreezyBoxはまだ開発の初期段階なんだ。デモで見えるものが今のところほとんど全てだよ。これから他の開発者がアプリや機能を追加して、人気が出るかどうかは分からないね。リモート設定のためのウェブアクセスは実装できるはずだけど、誰かやってくれるかな?ウェブサーバーはもうあるから、サーバーサイドのコードを動かすのはちょっと手間がかかるかも。

すごくクールだね!これをM5Stack Cardputerに早く載せなきゃ。

すごく面白いプロジェクトだね。おめでとう!これ試してみるつもりだよ。興味がある人のために、関連する他の2つのプロジェクトも紹介するね:1. redditコミュニティ(r/xteinkereader)がesp32-s3を使った小さな中国製電子書籍リーダー用のOSみたいなアプリを作ってる 2. esp32-s3用のLinuxポート。面白いことに、S3にはMMUがあるけど、このプロジェクトでは使われてないと思う。

このボードのコストパフォーマンスはマジでヤバいと思う。KVMの安い代替品として使うつもりだよ。esp bus pirateをフラッシュして(https://github.com/geo-tp/ESP32-Bus-Pirate)、リモートで制御したいデバイスに接続しておくのがすごく便利。消費電力もほとんどないから、WiFiに常に接続したままにしておいてる。

これを使ってディスプレイ共有はどうやって管理してるの?別のデバイスが必要なの?リファービッシュのサーバーがたくさんあるから、エンジニアが来るのを待たずにアクセスできるようにしたいんだ。予算が厳しいから、ちゃんとしたKVMは無理なんだよね。

ちょっと初心者でごめんだけど、これはブロブなしで使えるの?数年前にESPを試したとき、動かすのにバイナリが必要だったんだよね。