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
0
21
限界環境CPython rev. seccamp2025
らすぴー
August 14, 2025
Tweet
Share
More Decks by らすぴー
See All by らすぴー
kernel-vm-ittekita-yuukousai
raspython3
0
63
kernelvm-brain-net
raspython3
0
850
pyconjp2024-wince
raspython3
0
14
seccamp2024-edictionary-python-TLS
raspython3
0
17
Other Decks in Technology
See All in Technology
ドキュメントはAIの味方!スタートアップのアジャイルを加速するADR
kawauso
3
460
生成AI時代に必要な価値ある意思決定を育てる「開発プロセス定義」を用いた中期戦略
kakehashi
PRO
1
200
LLMエージェント時代に適応した開発フロー
hiragram
1
470
Goでマークダウンの独自記法を実装する
lag129
0
230
モダンな現場と従来型の組織——そこに生じる "不整合" を解消してこそチームがパフォーマンスを発揮できる / Team-oriented Organization Design 20250825
mtx2s
6
44k
Kubernetes における cgroup v2 でのOut-Of-Memory 問題の解決
pfn
PRO
0
380
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
8.6k
モダンフロントエンド 開発研修
recruitengineers
PRO
8
5.3k
Preferred Networks (PFN) とLLM Post-Training チームの紹介 / 第4回 関東Kaggler会 スポンサーセッション
pfn
PRO
1
280
GitHub Copilot coding agent を推したい / AIDD Nagoya #1
tnir
4
4.9k
Postman MCP 関連機能アップデート / Postman MCP feature updates
yokawasa
1
220
絶対に失敗できないキャンペーンページの高速かつ安全な開発、WINTICKET × microCMS の開発事例
microcms
0
250
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
For a Future-Friendly Web
brad_frost
179
9.9k
Balancing Empowerment & Direction
lara
3
600
Raft: Consensus for Rubyists
vanstee
140
7.1k
Facilitating Awesome Meetings
lara
55
6.5k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Music & Morning Musume
bryan
46
6.8k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Gamification - CAS2011
davidbonilla
81
5.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
A Modern Web Designer's Workflow
chriscoyier
696
190k
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