Kivy中文編程指南:授權協議
英文原文
警告
這並不是一個律師諮詢指南! Kivy 的開發組織,本指南的作者以及參與者,對任何信息缺失、產生誤導,以及任何基於這份指南的行為產生的任何後果都不負任何責任。這個指南只是提供一些信息,目的是幫助缺乏經驗的用戶。
你的代碼本身並不一定需要包括協議信息和對其他用到的軟體的版權聲明,不過二進位文件就不一樣了。
當你創建一個二進位文件(比如 exe,app 或者 APK 等等)的時候,裡面包括了 Kivy 以及其他的一些依賴項目或者你的應用程序用到的其他的包,其中的某些就可能有聲明需要你再自己的應用程序中進行版權信息聲明。在你對這些二進位文件進行發布之前,一定要檢查所有不屬於你源代碼的創建出來的文件,(比如 dll,pyd,so 等等)然後如果某一個文件需要有版權信息,記得加進去版權聲明。這樣你才能滿足 Kivy 開發需要的版權要求。
依賴包?
在 Kivy 支持的每個平台上都或多或少地用到了下面這些依賴包,所以你需要添加這些授權協議進去,基本都是只要你粘貼一段版權聲明到你的應用中,而不能當作自己寫了這些功能代碼。
- docutils
- pygments
- sdl2
- glew
- gstreamer (如果用到了再添加)
- 圖像和音頻庫(例如 SDL_mixer)
對於圖像和音頻庫,可能需要你手動去檢查一下,一般都是以 lib 這三個字母開頭的。這些程序的 LICENSE* 授權協議文件會在 PyInstaller 裡面包含,但在 python-for-android 則沒有,所以你得自己查找一下。
Windows 操作系統 (PyInstaller)?
要使用 Windows API 功能, Kivy 使用了 pypiwin32 。這個包是基於 PSF 協議發布的。
VS 可再發行組件?
使用 Visual Studio 編譯的 Python(官方版本)使用了來自微軟的一些文件,在特定條件下基於 CRT license 可以重新發布這些組件。包括這些文件名以及Py2 CRT 協議 或者 Py3 CRT 協議,主要看你用的是哪個版本的解釋器,所以要針對你的發布對象來具體情況具體對待。
- 可再發行組件列表
其他鏈接庫?
- zlib
特別注意
對那些沒有直接使用,但是打包的時候用到的包要列出,比如在 Windows 系統上面用的 PyInstaller。
Linux?
GNU/Linux 操作系統現在有好多發行版,所以沒有一個能夠通用給所有發行版的指南。這部分也屬於 RPi (不知道是什麼鬼東西)。然而可以簡化成兩種打包方式,(還是用 PyInstaller 來打包)提供包含的二進位文件,或者不提供。
如果包含了二進位文件,應該逐個檢查這些文件,比如 so 為擴展名的,除了你的代碼之外,要找到對應這些文件的授權協議。根據這個協議你可能需要在你的程序裡面添加一條對應的版權信息。
如果沒有包含二進位文件,比如你用 deb 等格式的文件進行打包,那就把麻煩扔給你的用戶了。你可以自己決定是否要滿足其他授權的要求,例如在你的應用中是否添加額外的版權信息。
Android?
APK 實際上只是一個文件壓縮包,所以可以解壓縮這個文件(就像 Windows 裡面那樣做)然後檢查每個文件。
APK/assets/private.mp3/private.mp3/這個文件夾內有所有包含的文件。大多數的都是和 Kivy 、Python 或者你的代碼相關的,不過那些與這些無關的就需要檢查一下了。
已知的包:
- pygame (如果用了舊的工具鏈)
- sqlite3
- six
有的包含的鏈接庫是 Kivy 直接使用或者通過 Pygame/SDL2 來使用的,他們的位置在 APK/lib/armeabi/。大多數都是和依賴包相關,要麼就是由 python-for-android 產生,並且可能就是 python-for-android 的一部分。例如libapplication.so等。
Mac?
Missing. 這部分 Kivy 官方文檔沒寫其他內容。
iOS?
Missing. 這部分 Kivy 官方文檔沒寫其他內容。
避免二進位文件?
有一種方法也許能夠避免這種很狗很麻煩的授權協議什麼的鬼東西,就是不用任何第三方的鬼扯玩意來構建你的應用。你可以用 Python 來自己創立一個模塊,在其中的 __main__.py都只有你自己的代碼,而 setup.py 列出需要的依賴包。
這樣你依然可以發布你的應用—就是你的代碼,然後你就不用管任何其他的授權協議了。不過這樣就更像是搭配使用,而不太算是發布程序了。這時候滿足各種授權的依賴關係,就轉移到你的程序的用戶身上了,他們需要自行搞定運行環境來使用這個模塊。如果你比較關心自己的用戶,建議你還是花點時間來閱讀一下可能導致的後果。
推薦閱讀:
※哪些簡單的linux或者python技能,能直接用在生活上讓周圍人刮目相看?
※Python 參數傳引用還是傳值?
※真正的遠方,到底在哪裡?
※Flowpython針對lambda的一個修正
※vscode怎麼編譯python?