Difference between revisions of "TerrariumAssembler"
From Wiki4Intranet
(→TerrariumAssembler .) |
|||
Line 23: | Line 23: | ||
{{@|Нативная сборка}} под каждый дистрибутив | {{@|Нативная сборка}} под каждый дистрибутив | ||
* Ад. RPM. DEB. RPM v4, v5, v4+, RPM on APT. | * Ад. RPM. DEB. RPM v4, v5, v4+, RPM on APT. | ||
− | * | + | * Dependency hell. API/ABI hell. |
+ | * Package policy hell. [https://www.toofishes.net/media/extra/arch-packages-gephi.pdf Deps] | ||
+ | * Сертифицированные дистрибутивы — все ископаемое. | ||
* Нет контроля над библиотеками. | * Нет контроля над библиотеками. | ||
** «Ограниченная поддержка» — «мы только собрали, не помним как, а поддержка — » | ** «Ограниченная поддержка» — «мы только собрали, не помним как, а поддержка — » | ||
* Комбинаторный взрыв вариантов тестирования. | * Комбинаторный взрыв вариантов тестирования. | ||
+ | |||
+ | [[File:maintaining-is-complex.png|right|256px]] | ||
* Можно — но за отдельные деньги. | * Можно — но за отдельные деньги. | ||
Line 32: | Line 36: | ||
=== Деплой на Linux. Их слишком много. === | === Деплой на Linux. Их слишком много. === | ||
[[File:periodic-table-of-distro.png|center|800px]] | [[File:periodic-table-of-distro.png|center|800px]] | ||
+ | |||
+ | === Деплой на Linux. Статическая линковка. === | ||
+ | * Одна утилита — ОК. | ||
+ | * Надо пересобирать все. | ||
+ | * Бандлы приложений | ||
+ | * Нарушение LGPL/QT-лицензий. | ||
=== Деплой на Linux. Контейнеры. === | === Деплой на Linux. Контейнеры. === | ||
Line 37: | Line 47: | ||
{{@|Стандартные контейнеры}} | {{@|Стандартные контейнеры}} | ||
* Масса вариантов | * Масса вариантов | ||
− | ** Docker | + | ** [http://docker.io Docker] |
− | ** | + | ** [https://flatpak.org/ Flatpak] |
− | ** | + | ** [https://snapcraft.io/ Snappy] |
− | ** AppImages | + | ** [https://appimage.org/ AppImages] |
* {{!|Хорошая идея}} | * {{!|Хорошая идея}} | ||
* {{@|Нет стандартов}} | * {{@|Нет стандартов}} | ||
* {{@|Нет на ряде дистрибутивов}} | * {{@|Нет на ряде дистрибутивов}} | ||
+ | ** Нужны клиенты-демоны | ||
+ | *** AppImage — не обязательно. | ||
Ожидания заказчика — «папка, копировать, просто работает» | Ожидания заказчика — «папка, копировать, просто работает» | ||
+ | * Intel X64 везде, ну ладно, пусть будет Win/Lin отдельно. | ||
=== Деплой на Linux. Просто папка? . === | === Деплой на Linux. Просто папка? . === | ||
* «Нельзя просто взять и скопировать»© | * «Нельзя просто взять и скопировать»© | ||
* Неочевидно для Windows-пользователей — «работает же с Win95…» | * Неочевидно для Windows-пользователей — «работает же с Win95…» | ||
− | ** Там это специально добиваются, и это недешево. | + | ** Там это специально добиваются, и это недешево. [https://ru.wikipedia.org/wiki/Side-by-side_assembly SxS] |
* libc-совместимость → major-изменения в API каждые пару лет. | * libc-совместимость → major-изменения в API каждые пару лет. | ||
+ | ** Да, с этим можно бороться → «[https://github.com/wheybags/glibc_version_header эмуляция старого glibc]» + [https://github.com/sulix/bingcc bingcc], но это недешево, | ||
+ | пересобирать все. | ||
* ld-image.so — базовый кирпич «в дженге» | * ld-image.so — базовый кирпич «в дженге» | ||
* ELF — все захардкожено жестко, по путям. «RPATH»… | * ELF — все захардкожено жестко, по путям. «RPATH»… | ||
Line 73: | Line 88: | ||
* Траты диска, {{@|памяти}}. | * Траты диска, {{@|памяти}}. | ||
** Каждую популярную софтину {{@|так нельзя}}. | ** Каждую популярную софтину {{@|так нельзя}}. | ||
− | * {{@|Уязвимости}} надо отслеживать | + | * {{@|Уязвимости}} надо отслеживать. «[https://flatkill.org/ Flatpak - a security nightmare]» |
** Не стоит для открытых сервисов. | ** Не стоит для открытых сервисов. | ||
Revision as of 02:25, 5 August 2020
- Title
- TerrariumAssembler
- Author
- Stas Fomin
- Subfooter
- Stas Fomin, 17:35, 8 August 2020
Contents
Проблема.
Околонаучные/высокотехнологичные приложения:
- Нет альтернативы — Numpy+Scipy+OpenCV+Keras…
- gonum
- Множество других фишек и батареек Python
- Быстрый цикл экспериментов и разработки
- Связь с бандлами приложений (Tesseract, Imagick)
Надо
- Деплой на
- Все версии Windows
- Все версии Linux (включая очень странные)
- Работало быстро
- Секретные алгоритмы
- On Impossibility of Obfuscation [1]
- PYC-файлы, cx_freeze, py2exe — абсолютная открытость.
Деплой на Linux. Стандартные варианты.
Нативная сборка под каждый дистрибутив
- Ад. RPM. DEB. RPM v4, v5, v4+, RPM on APT.
- Dependency hell. API/ABI hell.
- Package policy hell. Deps
- Сертифицированные дистрибутивы — все ископаемое.
- Нет контроля над библиотеками.
- «Ограниченная поддержка» — «мы только собрали, не помним как, а поддержка — »
- Комбинаторный взрыв вариантов тестирования.
- Можно — но за отдельные деньги.
Деплой на Linux. Их слишком много.
Деплой на Linux. Статическая линковка.
- Одна утилита — ОК.
- Надо пересобирать все.
- Бандлы приложений
- Нарушение LGPL/QT-лицензий.
Деплой на Linux. Контейнеры.
Стандартные контейнеры
- Масса вариантов
- Хорошая идея
- Нет стандартов
- Нет на ряде дистрибутивов
- Нужны клиенты-демоны
- AppImage — не обязательно.
- Нужны клиенты-демоны
Ожидания заказчика — «папка, копировать, просто работает»
- Intel X64 везде, ну ладно, пусть будет Win/Lin отдельно.
Деплой на Linux. Просто папка? .
- «Нельзя просто взять и скопировать»©
- Неочевидно для Windows-пользователей — «работает же с Win95…»
- Там это специально добиваются, и это недешево. SxS
- libc-совместимость → major-изменения в API каждые пару лет.
- Да, с этим можно бороться → «эмуляция старого glibc» + bingcc, но это недешево,
пересобирать все.
- ld-image.so — базовый кирпич «в дженге»
- ELF — все захардкожено жестко, по путям. «RPATH»…
Технически решаемо, но это не просто «скопировать».
TerrariumAssembler .
- Первый вариант CasketAssembler — вообще-то шкатулка.
- но и увы, гроб.
Возможные проблемы .
Концептуальные недостатки .
Очевидные проблемы «трагедии общин»
- На порядок жирнее
- Траты диска, памяти.
- Каждую популярную софтину так нельзя.
- Уязвимости надо отслеживать. «Flatpak - a security nightmare»
- Не стоит для открытых сервисов.
Падения компиляции.
Вероятностное.
{standard input}: Assembler messages: {standard input}:1898: Warning: end of file not at end of a line; newline inserted {standard input}:3538: Error: number of operands mismatch for `movq' {standard input}: Error: open CFI at the end of file; missing .cfi_endproc directive gcc: fatal error: Killed signal terminated program cc1
Что можно сделать:
- Увеличить память в VagrantFile
v.memory = 16000
- Уменьшить «--jobs» в "build*.sh"