Skip to content

Commit 092ed5c

Browse files
committed
계약: linuxOs 네이티브 CPython과 첫 성공 경로를 연다
기본 boot()는 WASI로 두고, createWebComputer().linuxPython이 linuxOs serial로 python3와 python -m pip를 친다. 별도 Buildroot python profile이 CPython 3.12.13과 pip 25.2를 고정하고 기존 linux image를 교체하지 않는다. CI matrix에 python A/B를 넣어 재현 빌드가 이미지를 만든다. 같은 미출하 표면에 첫 성공 Setup과 guest pip 문을 둔다. 검증: npm test GREEN (13/13). 이미지 없는 제품 게이트는 명시적으로 닫힌다.
1 parent 32c1ddb commit 092ed5c

51 files changed

Lines changed: 2087 additions & 571 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/buildroot-guest.yml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
strategy:
2121
fail-fast: false
2222
matrix:
23-
profile: [linux, node]
23+
profile: [linux, node, python]
2424
slot: [a, b]
2525
env:
2626
# Matrix slots have isolated runners. Node records its cross-toolchain
@@ -65,7 +65,7 @@ jobs:
6565
strategy:
6666
fail-fast: false
6767
matrix:
68-
profile: [linux, node]
68+
profile: [linux, node, python]
6969
steps:
7070
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
7171
with:
@@ -95,12 +95,15 @@ jobs:
9595
if (actualSha256 !== manifest.output.sha256) throw new Error("verified image SHA-256 mismatch");
9696
if (image.byteLength !== manifest.output.byteLength) throw new Error("verified image byteLength mismatch");
9797
if (manifest.evidence.legalWarnings.length) throw new Error("verified legal-info warnings are not empty");
98-
if (manifest.profile === "node") {
99-
if (manifest.runtime?.name !== "node" || manifest.runtimeOracle?.version !== `v${manifest.runtime.version}`) {
100-
throw new Error("verified Node runtime oracle mismatch");
98+
if (manifest.runtime) {
99+
const expectedVersion = manifest.runtime.name === "node"
100+
? `v${manifest.runtime.version}`
101+
: manifest.runtime.version;
102+
if (!manifest.runtime.name || manifest.runtimeOracle?.version !== expectedVersion) {
103+
throw new Error(`verified ${manifest.runtime.name} runtime oracle mismatch`);
101104
}
102105
if (manifest.runtimeOracle.sha256 !== manifest.runtime.oracle.sha256) {
103-
throw new Error("verified Node workload digest mismatch");
106+
throw new Error(`verified ${manifest.runtime.name} workload digest mismatch`);
104107
}
105108
}
106109
const receipt = {

CHANGELOG.md

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,33 @@ happen only on an explicit maintainer decision; the Unreleased section accumulat
1414

1515
### Added
1616

17-
No unreleased public changes.
17+
- **Setup is a public first-hour contract.** Both READMEs document Chromium and Edge, the two isolation
18+
headers, and Vite and Next snippets. `checkEnvironment()` points at the live `#setup` heading.
19+
- **`npx pyproc-playground` serves the installed package graph with those headers** and opens the first
20+
Python receipt path. Default `boot()` still loads only the core engine.
21+
- **The second public example reopens a Machine image** and reads back the recorded value.
22+
- **Default Machines accept Python package requests.** `%pip install` and `python -m pip install` use
23+
the attached package environment. Unsupported native wheels and `subprocess` pip stay readable
24+
failures and do not stop later Python execution.
25+
- **Native Linux CPython is a second door, not the default kernel.** `createWebComputer().linuxPython`
26+
runs `python3` and `python -m pip` over `linuxOs` serial. Root `boot()` stays the owned WASI kernel.
27+
The door is closed without a linux guest. A separate Buildroot `python` profile
28+
(`buildroot-pyproc-python-i686.bin`) pins CPython 3.12.13 and pip 25.2 with the same
29+
reproducible A/B, SBOM, legal-info, and QEMU oracle contract as the Node guest. The slim
30+
linux image still has no `python3`.
31+
32+
### 한국어 요약
33+
34+
- Setup 절이 Chromium/Edge, 헤더 두 줄, Vite와 Next 스니펫을 공개하고, 환경 진단이 `#setup`으로 연결된다.
35+
- `npx pyproc-playground`가 설치 그래프를 COOP/COEP로 서빙해 첫 Python receipt를 연다. 기본 `boot()`
36+
core engine만 로드한다.
37+
- 두 번째 공개 예제가 Machine image를 다시 열어 기록한 값을 읽는다.
38+
- 기본 Machine에서 `%pip install``python -m pip install`로 패키지를 요청한다. 지원하지 않는
39+
native wheel과 `subprocess` pip는 패키지 오류로 거절되고 이후 파이썬 실행은 계속된다.
40+
- 네이티브 Linux CPython은 두 번째 문이다. `createWebComputer().linuxPython``linuxOs` serial로
41+
`python3``python -m pip`를 친다. 기본 `boot()`는 WASI 커널이다. 별도 Buildroot python
42+
profile이 CPython 3.12.13과 pip 25.2를 Node guest와 같은 재현/SBOM/oracle 계약으로 싣는다.
43+
slim linux image에는 여전히 `python3`가 없다.
1844

1945
## 0.0.24 - 2026-08-16
2046

0 commit comments

Comments
 (0)