Лицензии: PHP в приложении
Приложение Mailgist для Mac и Windows работает на встроенном интерпретаторе PHP. В нём есть библиотеки под GNU LGPL 2.1 — вы вправе изменить их, пересобрать PHP и подставить свою сборку в установленное приложение. Ниже — что именно входит, как мы собираем PHP и как его заменить.
Что входит и под какими лицензиями
- PHP 8.5.12 — PHP License 3.01. Исходники: php-8.5.12.tar.xz, github.com/php/php-src.
- libmbfl (внутри расширения mbstring, Mac и Windows) — GNU LGPL 2.1. Исходники — в дереве PHP: ext/mbstring/libmbfl.
- GNU libiconv (только Windows, внутри официальной сборки PHP, в
php8.dll) — GNU LGPL 2.1. Исходники: gnu.org/software/libiconv, вариант для сборки PHP под Windows — github.com/winlibs/libiconv. - На Mac GNU libiconv в PHP нет: iconv берётся из самой macOS (
/usr/lib/libiconv.2.dylib). - Прочие библиотеки внутри PHP (libxml2, OpenSSL, curl, SQLite, libzip, libsodium, Oniguruma, zlib) — под разрешительными лицензиями (MIT, Apache 2.0, BSD, ISC, общественное достояние); их тексты — в исходниках по ссылкам выше.
Mac: как мы собираем PHP
PHP для Mac собирается статически утилитой static-php-cli 2.8.5 (MIT), затем пересобирается с iconv системы. Нужны macOS 14+ и Xcode Command Line Tools.
- Скачать spc и сверить sha256:
curl -LO https://github.com/crazywhalecc/static-php-cli/releases/download/2.8.5/spc-macos-aarch64.tar.gz shasum -a 256 spc-macos-aarch64.tar.gz # Apple Silicon: acf2f25d56d0cbf8e65aa82e5054fef555f7be7c5c38046c6e0819f266d83225 # Intel (spc-macos-x86_64.tar.gz): e8b798048f62ca4960764196543b60ae703f7174aa418824cf542aeec1d2cd6a tar xzf spc-macos-aarch64.tar.gz - Собрать PHP с теми же расширениями:
EXTS="ctype,curl,dom,fileinfo,filter,iconv,mbstring,mbregex,openssl,pcntl,pdo,pdo_sqlite,phar,posix,session,simplexml,sodium,sqlite3,tokenizer,xml,xmlreader,xmlwriter,zip,zlib" ./spc doctor --auto-fix ./spc download --with-php=8.5.12 --for-extensions="$EXTS" --prefer-pre-built ./spc build --build-cli "$EXTS" - Наш шаг пересборки с iconv macOS (чтобы GNU libiconv не попала внутрь):
- удалить из
buildroot/libфайлыlibiconv.*,libcharset.*, их.pcи заголовкиiconv.h,libcharset.h,localcharset.h; - пересобрать libxml2 той же командой cmake из журнала spc (
log/spc.shell.log), добавив-DIconv_IS_BUILT_IN=FALSE -DIconv_INCLUDE_DIR=$(xcrun --show-sdk-path)/usr/include -DIconv_LIBRARY=$(xcrun --show-sdk-path)/usr/lib/libiconv.tbd, и убрать-liconvизlibxml-2.0.pc; - в
source/php-src:make clean,./configureс аргументами из./config.status --config, где--with-iconv=заменён на$(xcrun --show-sdk-path)/usr, затем та же командаmake … cliиз журнала spc, без-lcharset; strip -S sapi/cli/php, удалить записи rpath (install_name_tool -delete_rpath) и подписать ad hoc:codesign -f -s - php.
- удалить из
- Проверка:
otool -L phpпоказывает/usr/lib/libiconv.2.dylib, аphp -m— все расширения из списка.
Чтобы подставить изменённую libmbfl, поправьте исходники в source/php-src/ext/mbstring/libmbfl и повторите последний шаг сборки PHP. Наш сценарий сборки целиком пришлём по запросу.
Windows: какой PHP мы берём
На Windows используется официальная сборка с windows.php.net без изменений: php-8.5.12-nts-Win32-vs17-x64.zip, sha256 2ab242af38d76bdf417cde5ec048b1bcd76a5a40f39a3d15d5f046f38571c477. Из неё берутся php.exe, DLL ядра и расширения curl, fileinfo, mbstring, openssl, pdo_sqlite, sodium, sqlite3, zip.
Исходники этой сборки: php-8.5.12-src.zip, инструменты сборки — php-sdk-binary-tools, библиотеки-зависимости (в том числе libiconv) — downloads.php.net/~windows/php-sdk/deps. Порядок сборки — в руководстве PHP.
Как заменить PHP в установленном приложении
- Mac. Закройте Mailgist. Файл —
/Applications/Mailgist.app/Contents/MacOS/php. Замените его своей сборкой и переподпишите приложение:codesign --force --deep --sign - /Applications/Mailgist.app. После этого подпись разработчика снимается, и при первом запуске macOS может спросить подтверждение. - Windows. Закройте Mailgist. Каталог —
%LOCALAPPDATA%\Mailgist\php\. Заменитеphp.exe,php8.dllилиext\php_mbstring.dllсвоими файлами, собранными из той же версии PHP.
Обновление приложения вернёт нашу сборку — замену нужно повторить. Нужна та же версия PHP и тот же набор расширений: иначе приложение может не запуститься.
Копия исходников
По запросу на support@mailgist.app пришлём копию исходников библиотек под LGPL и PHP ровно тех версий, что в приложении, вместе с нашим сценарием сборки. Предложение действует не меньше трёх лет с выхода каждой версии приложения.