App installer design: click packages
Sergey Shambir
sergey.shambir.auto at gmail.com
Thu May 9 10:47:47 UTC 2013
Hi,
Thanks for efforts on simplifying package management! I'll wait for
further information from UDS session, but first I want to provide some
additional info that can help you in research. I'm QtCreator contibutor,
worked on source code models and project management subsystems,
including build systems support.
Click packages have many decisions that can scare experienced Linux
users, but are reasonable. So, for marketing purposes and in order to
defend idea, please make more detailed overview of each design decision,
which includes: 1. Comparison of various approaches in this concrete
problem, with pros and cons. 2. Destroying of common myths associated
with selected approach (like "if dependencies will be eliminated, size
of packages will grow significantly").
Possible research agenda:
1. Which benefits brings declarative property-based app manifest?
2. Which benefits brings reversing build system <-> package manager
interaction order?
3. Can qmake automatically create app manifest in near future?
4. Does size of real applications packages really grow with
no-dependencies system with SDK (which includes Qt)?
5. Which issues are in Listaller and existing build systems (mostly in
qmake)?
6. Which pros and cons have installing a) from root b) from user to
$HOME c) from partially privilegied, but non-root user (similar to
"wwwrun" or "vboxuser")?
7. Which ways exist to support development model "build on newer system,
deploy to older"?
Let me throw first stone:
1. Declarative manifest
Main benefit is ability to handle this file automatically: index it,
provide UI and either generate automatically from build system
information or parse to get information back. Build systems is an
excellent example: XCode, Visual Studio and CodeBlocks IDEs have
property-based build settings, and they can automatically edit such
settings for years. Meanwhile, no one IDE can automatically edit
Autotools or Premake files, CMake editing is implemented only in
KDevelop and is buggy; editing qmake in QtCreator also works wrong in
complex cases.
2. Reversing build system <-> package manager
Typical project selects one build system, but targets to many platforms.
At first, when package manager handles buildsystem, user should manually
debug package manager scripts on each platform. At second, build system
developers do not want to implement creating packages (because package
manager designed to handle build system):
https://bugreports.qt-project.org/browse/QBS-16. At third, this
situation previously led to ugly design of make-based build systems:
they are script-based and expose hooks to package manager with
environment variables or configure options, but have no ability to
easily use different build configurations (Debug, Release) in same time,
and portability between platforms achieved with hacks or annoying
debugging. Declarative build systems have no such problems.
4. Packages size on disk and in memory.
QtCreator in Ubuntu depends on Qt and Botan libraries. It doesn't depend
on Botan in upstream version, since it keeps Botan copy in sources. Most
crossplatform apps keep dependencies set as small as possible, because
Windows and Mac OS X have no dependency-based package system. So, size
growth will be insignificant.
5a. Listaller issues
Currently Listaller handles build system:
http://listaller.tenstral.net/docs/doc/packaging.html. Meanwhile,
buildsystem should handle listaller, and do it easily. No one developer
wants to manually write and debug list of files to install.
5b. Qmake issues
QMake have INSTALL variable that tracks installable files, but doesn't
keep target bundle version, description and name. Since QtCreator have
qmake evaluator, it can be patched to create or update manifest file,
but some information should be typed by developer.
7. Build on newer system, deploy to older
Listaller and LSB tools from Linux Foundation both use wrappers around
gcc and special linker wrapper / special version of glibc respectively.
Another way used in Mac OS X and iOS: XCode contains several SDKs, and
application builds with only one in sysroot.
More information about the ubuntu-devel
mailing list