Ryeに見る自己完結型Pythonとライセンスの話
https://techtekt.persol-career.co.jp/entry/tech/240523_01
#Rye #python-build-standalone
今回はそんな中で見られた、pyenvでインストールされたPythonとRyeでインストールされたPythonの違いと、要因となるライセンスの話を紹介したいと思います。
関数定義ができない
Ryeの方はタブが利かない
Ryeの使用するPythonではライセンス上の理由から、readlineではなくlibeditからコンパイルされたものであると記載されています
Python readline
このモジュールの実装にはGNU readlineが使われる場合と、libeditが使われる場合があります。
実際にreadline.__doc__を確認すると、pyenvのものはGNU readline、Ryeのものはlibeditであることがわかります。
libeditはGNU readlineと互換性を持ちますが、キーバインドなどが異なるため、挙動に違いが出てきます。
Ryeは上記(※pyenv)のような差異が生じることを良しとしていません。
CPythonの場合、ダウンロードされるPythonはPyOxidizer projectのpython-build-standaloneリポジトリのものとなります。
これにより、Ryeにおいては同じディストリビューション、同じバージョンならば同じPythonがインストールされることが保証されます。
ライセンス(筆者の見解)
Ryeの使用するpython-build-standaloneは、ビルド済みPython並びに標準ライブラリ一式を派生物として提供、すなわち再頒布するため、含まれるPython本体や標準ライブラリのライセンスを考慮する必要があります。
Python本体と多くの標準ライブラリのライセンスはPSFライセンスと呼ばれるBSDスタイルの独自ライセンス
GNU readlineライブラリのライセンスはGPLv3
GNU readlineライブラリを用いてコンパイルされたreadlineモジュールを派生物に同梱すると、GPLv3が適用されるのではないかとのこと
これを回避するため、python-build-standaloneではGNU readlineライブラリと互換性があり、BSDライセンスであるlibeditを使用してコンパイルしたreadlineモジュールを採用し、派生物はBSDライセンスで提供されています。
他にPHPやMySQLの例(注2)
一方、Python本体や標準ライブラリを含めた派生物を作成し再頒布する場合には、python-build-standaloneと同様にライセンスに関して確認する必要があります。
例としてはPyInstaller等でバンドルやビルドしたアプリケーションを配布する場合や、実装したスクリプトと動作環境一式を内包したDockerイメージを配布する場合がこれに該当するでしょうか。