Лицензии: PHP в приложении

Приложение Mailgist для Mac и Windows работает на встроенном интерпретаторе PHP. В нём есть библиотеки под GNU LGPL 2.1 — вы вправе изменить их, пересобрать PHP и подставить свою сборку в установленное приложение. Ниже — что именно входит, как мы собираем PHP и как его заменить.

Mailgist 0.9.11PHP 8.5.12

Что входит и под какими лицензиями

  • 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.

  1. Скачать 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
  2. Собрать 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"
  3. Наш шаг пересборки с 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.
  4. Проверка: 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 ровно тех версий, что в приложении, вместе с нашим сценарием сборки. Предложение действует не меньше трёх лет с выхода каждой версии приложения.

Условия использования →   Конфиденциальность →