|
| 1 | +> Written by Claude |
| 2 | +
|
| 3 | +- - - |
| 4 | + |
| 5 | +GNU Coreutilsのソースを転用できるようにするには、WebVMのアーキテクチャを大幅に拡張する必要があります。以下のアプローチを提案します: |
| 6 | + |
| 7 | +### 1. POSIX互換システムコールレイヤーの実装 |
| 8 | + |
| 9 | +必要なシステムコール群 |
| 10 | + |
| 11 | +```c |
| 12 | +// ファイルI/O |
| 13 | +open(), close(), read(), write(), lseek() |
| 14 | +stat(), lstat(), fstat(), access() |
| 15 | +chmod(), chown(), chgrp() |
| 16 | +link(), symlink(), unlink(), rename() |
| 17 | +opendir(), readdir(), closedir() |
| 18 | + |
| 19 | +// プロセス管理 |
| 20 | +fork(), execve(), wait(), waitpid() |
| 21 | +getpid(), getppid(), getuid(), getgid() |
| 22 | +signal(), kill(), alarm() |
| 23 | + |
| 24 | +// メモリ管理 |
| 25 | +mmap(), munmap(), brk(), sbrk() |
| 26 | +``` |
| 27 | + |
| 28 | +システムコール番号の標準化 |
| 29 | + |
| 30 | +- Linux/POSIX のシステムコール番号に準拠 |
| 31 | +- WebAssembly 制約の代替実装 (`fork` → `posix_spawn` 等) |
| 32 | + |
| 33 | +### 2. 完全なlibcの実装 |
| 34 | + |
| 35 | +標準ライブラリ関数群 |
| 36 | + |
| 37 | +```c |
| 38 | +// stdio.h |
| 39 | +printf(), scanf(), fopen(), fclose() |
| 40 | +fread(), fwrite(), fseek(), ftell() |
| 41 | +getchar(), putchar(), gets(), puts() |
| 42 | + |
| 43 | +// stdlib.h |
| 44 | +malloc(), free(), realloc(), calloc() |
| 45 | +atoi(), atol(), strtol(), strtod() |
| 46 | +getenv(), setenv(), system() |
| 47 | + |
| 48 | +// string.h |
| 49 | +strcpy(), strcat(), strlen(), strcmp() |
| 50 | +memcpy(), memset(), memcmp() |
| 51 | + |
| 52 | +// time.h |
| 53 | +time(), ctime(), gmtime(), strftime() |
| 54 | +``` |
| 55 | + |
| 56 | +### 3. アーキテクチャの再設計 |
| 57 | + |
| 58 | +スタンドアロンバイナリ方式への移行 |
| 59 | + |
| 60 | +現在: `shell.c` 内のビルトイン関数 |
| 61 | + |
| 62 | +↓ |
| 63 | + |
| 64 | +将来: 独立したWASMバイナリ |
| 65 | +``` |
| 66 | + /bin/ls.wasm |
| 67 | + /bin/cat.wasm |
| 68 | + /bin/cp.wasm |
| 69 | +``` |
| 70 | +
|
| 71 | +### 4. ビルドツールチェーンの構築 |
| 72 | +
|
| 73 | +GNU Autotools サポート |
| 74 | +
|
| 75 | +coreutilsの標準ビルド |
| 76 | +```bash |
| 77 | +./configure --host=wasm32-unknown-unknown |
| 78 | +make CC=clang --target=wasm32 |
| 79 | +``` |
| 80 | + |
| 81 | +WebVM 専用ツールチェーン |
| 82 | +```bash |
| 83 | +./webvm-clang -o ls.wasm ls.c -lwebvm-libc |
| 84 | +./webvm-ld --export=main ls.o -o /bin/ls.wasm |
| 85 | +``` |
| 86 | + |
| 87 | +### 5. 段階的な実装戦略 |
| 88 | + |
| 89 | +Phase 1: コア機能の拡張 |
| 90 | + |
| 91 | +- システムコールテーブルの実装 |
| 92 | +- 基本的なlibc関数群 |
| 93 | +- プロセスローダーの作成 |
| 94 | + |
| 95 | +Phase 2: 互換性レイヤー |
| 96 | + |
| 97 | +- POSIX準拠のファイルAPI |
| 98 | +- シグナル処理の基本実装 |
| 99 | +- 環境変数管理 |
| 100 | + |
| 101 | +Phase 3: GNU Coreutils 移植 |
| 102 | + |
| 103 | +- 単純なコマンドから開始(cat, echo, true, false) |
| 104 | +- 徐々に複雑なコマンドに拡張(ls, cp, mv) |
| 105 | +- 最終的に高度なコマンド(grep, sort, find) |
| 106 | + |
| 107 | +### 6. WebAssembly 制約への対応 |
| 108 | + |
| 109 | +- メモリ分離 |
| 110 | + |
| 111 | +- `fork()` の代替実装 |
| 112 | + |
| 113 | +### 7. 開発ツールとデバッグ環境 |
| 114 | + |
| 115 | +互換性テストスイート |
| 116 | + |
| 117 | +```bash |
| 118 | +# GNU coreutils テストの実行 |
| 119 | +make check-coreutils |
| 120 | +``` |
| 121 | + |
| 122 | +クロスコンパイル環境 |
| 123 | +```dockerfile |
| 124 | +FROM emscripten/emsdk |
| 125 | +RUN apt-get install autotools-dev |
| 126 | +COPY webvm-toolchain /usr/local/bin/ |
| 127 | +``` |
| 128 | + |
| 129 | +### 実装の優先順位 |
| 130 | + |
| 131 | +1. libc基盤 → malloc, stdio, string関数 |
| 132 | +2. ファイルシステムAPI → open/read/write/stat |
| 133 | +3. プロセスローダー → 独立したWASM実行 |
| 134 | +4. シンプルなcoreutils → cat, echo, true, false |
| 135 | +5. 複雑なcoreutils → ls, cp, mv, rm |
| 136 | +6. 高度な機能 → grep, sort, find |
| 137 | + |
| 138 | +この段階的アプローチにより、GNU Coreutils の豊富なコマンド群を WebVM に移植し、本格的な Unix 環境を実現できます。 |
0 commit comments