Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
限界環境CPython rev. seccamp2025
Search
らすぴー
August 14, 2025
Technology
39
0
Share
限界環境CPython rev. seccamp2025
らすぴー
August 14, 2025
More Decks by らすぴー
See All by らすぴー
高校のChromebookでも自由なネット環境を!
raspython3
0
140
kernel-vm-ittekita-yuukousai
raspython3
0
94
kernelvm-brain-net
raspython3
0
1.1k
pyconjp2024-wince
raspython3
0
41
seccamp2024-edictionary-python-TLS
raspython3
0
37
Other Decks in Technology
See All in Technology
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
6
920
AI時代に越境し、 組織を変えるQAスキルの正体 / QA Skills for Transforming an Organization
mii3king
5
4.3k
Claude Code / Codex / Kiro に AWS 権限を 渡すとき、何を設計すべきか
k_adachi_01
4
1.2k
毎日の作業を Claude Code 経由にしたら、 ノウハウがコードになった
kossykinto
1
1.3k
ボトムアップの改善の火を灯し続けろ!〜支援現場で学んだ、消えないための3つの打ち手〜 / 20260509 Kazuki Mori
shift_evolve
PRO
2
650
AIの揺らぎに“コシ”を与える階層化品質設計
ickx
0
270
みんなの考えた最強のデータ基盤アーキテクチャ'26前期〜前夜祭〜ルーキーズ_資料_遠藤な
endonanana
0
300
ワールドカフェ再び、そしてゴール・ルール・ロール・ツール / World Café Revisited, and the Goals-Rules-Roles-Tools
ks91
PRO
0
140
React 19×Rustツール 進化の「ズレ」を設計で埋める
remrem0090
1
110
Swift Sequence の便利 API 再発見
treastrain
1
260
生成AI時代に信頼性をどう保ち続けるか - Policy as Code の実践
akitok_
1
210
新卒エンジニア研修、ハンズオンの設計における課題と実践知/ #tachikawaany
nishiuma
2
140
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
360
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
AI: The stuff that nobody shows you
jnunemaker
PRO
6
630
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
350
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Writing Fast Ruby
sferik
630
63k
Code Reviewing Like a Champion
maltzj
528
40k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
170
Evolving SEO for Evolving Search Engines
ryanjones
0
190
The Cult of Friendly URLs
andyhume
79
6.9k
Transcript
限界環境CPython rev. seccamp2025 らすぴー / RasPython3 (@RasPython3) 1
注意事項 • これは2024年夏のPyCon JP 2024で行った野良発表 「Python3をWindows CEに移植した話」 の二番煎じrev. seccamp2025となっています •
時間の都合で当時のスライドを流用しており、大変読みにくく なっているかと思われます • そもそも説明が雑です 2
目次 1. 自己紹介 2. 電子辞書で動くPython 3. 事の発端 4. Pythonのバージョン選定 5.
パッチ適用 6. ビルドツールの選定 7. configure.acの改造 8. Makefile.pre.inの改造 9. WinCEに無いAPIの実装 10.コンソール問題 11.同名DLL問題 12.その他の問題 13.追加モジュールについて #rev. seccamp2025 14.追加移植: tqdm 3
自己紹介 活動名 RasPython3 / らすぴー X: @raspython3 普段やってること 各種ウェブツールづくり Discordのボットづくり
Linuxいじり 電子辞書いじり ネットワーク関連 etc. 4
電子辞書で動くPython • 電子辞書Brainについて • SHARPの電子辞書シリーズ • Windows CE(WinCE)が動作 • 2021年以降のモデルは別OS
• 2chなどで自作アプリやハックが 盛んだった • 今年5月頃にインターネット接続に ついに成功 • Kernel/VM@関西11回目で発表したよ 5 SHARP Brain PW-SH7-W 自分が持ってる機体の色違い
電子辞書で動くPython • 2007年頃まで開発されていた、WinCEで動く 「PythonCE」が存在 • v2.3.4 ~ v2.5 まで対応 •
独自コンソールにより対話モードが使用可能 • numarrayなど一部の追加モジュールも https://sourceforge.net/projects/pythonce/ 6 CPythonのWinCE移植版 「PythonCE」のアイコン
事の発端 電子辞書でPythonをいじりたかったが、動作するPythonの バージョンが2.5と古かった → Python3はないのかと調べてみたが無さそう ...じゃあ移植しちゃえばいいのでは? 7
事の発端 電子辞書でPythonをいじりたかったが、動作するPythonの バージョンが2.5と古かった → Python3はないのかと調べてみたが無さそう ...じゃあ移植しちゃえばいいのでは? 8 EOLを迎え需要もない 環境に無茶苦茶アプロ ーチで移植して専門家
を怖がらせましょう!
Pythonのバージョン選定 移植開始時期 ... 2023年4月頃 → v3.10.10 stable stable rc alpha
stable beta rc stable 3.9 3.10 3.11 3.12 9 ココ→
パッチ適用 Python2.5から時が流れ、WinCE用の記述はほぼ消えている そのため、2.5当時の記述を引っ張ってくる必要があった 手がかり • PythonCEのreadme • WinCE用のマクロ等 ... _WIN32_WCE
や MS_WINCE • 3.6の時に適用された、WinCE対応の名残を削除するコミット 10
パッチ適用 https://github.com/python/cpython/commit/10108a7b9affa61719a1dc1863 edb2bdb3402fd1 Windows CEのサポートを削除した。 それは完了することはなく、Windows CEは もはやPythonに関連するプラットフォームで はない。 11
ビルドツールの選定 Pythonで使えるビルドツール: • Makefile + gcc ... LinuxとMac • Visual
Studio + Visual C++ ... Windows • SCons + eVC4 ... Windows CE (PythonCE) 12
ビルドツールの選定 当時使用できた環境 • Raspberry Pi 3B & ZeroW • Chromebook
→ Windows系のビルドツールの使用が困難 → WinCE向けのgcc「cegcc」を使うしかない 13
ビルドツールの選定 そういえば... 1. Windows用の追加のソースはPC以下にまとまっている 2. Linuxで使うソースファイルの多くはWindowsでも使っている → Linuxのビルドスクリプトに手を加えたらどうにかなるのでは 14
configure.acの改造 まずは何も手を加えずに ./configure --host=mingw32ce --target=mingw32ce → mingw32ceは非対応とエラー • WinCE用の記述を追加 15
Makefile.pre.inの改造 WinCEで使うソースファイルのリストを記述 • Windowsで使うソースファイル • PythonCEに存在したWinCE用のソースファイル • PC/wince_compatibility.* • PC/WinCE/_tkinter/*
• 今回の移植で新たに作成したファイル • WinCE/* • Modules/_io/winceconsoleio.c 16
WinCEに無いAPIの実装 主にPC/wince_compatibility.*で対応 • strerr • wcsnlen • dup • CommandLineToArgvW
• CreateSymbolicLink • GetFileType • *_s 17
コンソール問題 コンソールがない場合(電子辞書など)、Pythonの標準入出力を扱 えない PythonCEでは独自のコンソールを用意していたが、 Pythonスクリプトによる疑似コンソールだった → Win32APIで窓を作り、readline や WriteConsole を独自実装
18
コンソール問題 問題発生 ... 電子辞書で stdin や stdout が使えない stdin, stdout,
stderrのファイル記述子は本来は 0, 1, 2 そのすべてが無効になっていた(-1) → fileno や isatty を別に実装して偽装 19
同名DLL問題 WinCEでは、ロードを試みるDLLと同名のDLLをほかのプログラム がすでにロードしていた場合、ロード済みのDLLを使いまわす →複数のPythonが入っていると挙動がおかしくなる 例 • Python3の_tkinter.pydを読み込もうとしてPythonCEの _tkinter.pydを使おうとしてしまう • Python3.10.14のpython310.dllを使おうとしてpython3.10.0の
それを使ってしまう 20
同名DLL問題 解決策 • *.pyd → *.cp310-wince_arm.pydに変更 • python310.dll と python3.10.exe
双方にハッシュ値を 埋め込み、実行時に検証する 21
その他の問題 • 環境変数がない environ.iniという設定ファイルを作成、また --env-set オプションや --env-path オプションを追加することで対応 • pyファイルを直接実行できない
レジストリにpyファイルが登録されないため、pyファイルをダブルク リックしても実行できない → PYTHONASSOCIATEREG という環境変数を追加、起動時にレジストリ設 定をできるように 22
その他の問題 • ModuleNotFoundError: No module named ‘os’ なぜかosがインポートできない(!?) 原因: “os.py”
が “OS.PY” になっていた!(ファイルシステムの問題) → PYTHONCASEOK を設定することにより対応 • python310._pthを使った時の挙動がなんか変 なんかドキュメントに書いてある通りの挙動じゃない... → ドキュメントの日本語訳が間違っていた!(現在は修正済み) 23
追加モジュールについて 現在(2025/08/14)、以下の追加モジュールが移植されている • cffi • cryptography • 現行バージョンはRust使用のため古いバージョンのみ • PyCryptoDome
• Numpy • OpenSSL • PIL (Pillow) • Pyftpdlib • requests 24
追加モジュールについて cryptographyや標準のsslモジュールを動作させるためには OpenSSLが必要 海外の方で、OpenSSLをWinCEに移植している人がいた が、電子辞書では動作せず... さらに、そのビルドにはVisual Studioを使っていた https://www.hpcfactor.com/forums/forums/thread-view.asp?tid=20731&start=1 25
追加モジュールについて そこで、cegccでOpenSSLをビルドすることを試みた ところが、OpenSSLもerrnoや環境変数を使うためビルドに失敗 これらも独自に実装すると、かなり面倒なことになる → Pythonで使うことを前提に、python310.dllに依存させたら いいのでは 26
追加モジュールについて 結果...うまくいった! これがうまくいかなかった場合、別途フル装備のcoredllを 使わなければならず、ライセンスの問題で配布が困難だった 最終的に、Pythonのビルド途中でOpenSSLもビルドして、Python のDLLに変更があっても問題なく動作できるようにした 27
#rev. seccamp2025 追加移植: tqdm • プログレスバーを簡単に表示できる 便利ライブラリ • ピュアPythonライブラリなので、 何も考えずにプログラムのコピペで
インストールできる • pip等が使えない(!)ので... 28
#rev. seccamp2025 追加移植: tqdm よーし早速動かしてみよう... 29 まあ想定内...
#rev. seccamp2025 追加移植: tqdm ...(範囲選択により真の姿をあらわにする) 30 崩壊★
#rev. seccamp2025 追加移植: tqdm Q. なぜ崩壊したのか? A. 疑似コンソールの実装が雑&中途半端だから。 • キャリッジリターンが未実装
• というか制御文字きちんと処理してない • だって面倒臭かったんだもん... 31
#rev. seccamp2025 追加移植: tqdm キャリッジリターンを雑に実装した結果... 32 成功!!! (豆腐は許して)
最後に • 皆さんも限界・異常環境にお好みの言語を移植しましょう! • 使えるAPIが少なかったりする制限あり環境がおすすめ • 標準APIの内部挙動を学べるよ • インタプリタやコンパイラの内部挙動も学べるよ •名刺が大量に(400枚以上)余っているので
ぜひ交換しましょう!!!!! 33