Skip to content

Commit c2208d4

Browse files
author
t3tra-dev
committed
add idea (gnu-coreutils)
1 parent 83ac614 commit c2208d4

1 file changed

Lines changed: 138 additions & 0 deletions

File tree

idea/coreutils.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
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

Comments
 (0)