A new package management format.
C++ Perl C Python Lua Objective-C Shell
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



AppTools is a new package management system to Linux. Read more at http://code.google.com/p/apptools-dist.


AppTools is founded on the principle of universality, that an object (such as a package) should run anywhere, under any conditions, without requiring great effort on part of the user. Following this, we derive that:

  • Packages should be able to be shared amongst distributions without issue.
  • Packages should be able to run in place, installed as the user or installed system-wide without requiring separate versions for each.
  • Packages should be able to refer to different versions of the same library without dependency conflicts.
  • Packages should be able to be uninstalled completely, without remnant files being left behind.
  • The package management system must be able to refer to multiple sources to resolve dependencies on-the-fly, including any base package management system included with the distribution.
  • The package management system must support third-party packages and third-party repository sources.


Create a new build directory outside the source area and change to this directory. Run cmake ../path/to/source followed by make to build a copy of AppTools.

You should use a compiler that supports C++11 such as LLVM/Clang to compile AppTools (you'll get better warnings and error messages with LLVM/Clang as well).


The AppTools infrastructure orientates around the AppFS package format. Unlike other package formats, this is a full read-write filesystem with on-the-fly resizing which allows applications to be run directly from within their packages as well as installed on a system.

The binaries created by the appfs are the core utilities for interacting with the package format, while AppUtil provides a Python-based infrastructure for interacting with the package management system. By exposing the installation and similar mechanism as easy-to-understand and easy-to-modify Python code, it allows developers and distributions to customize the package management system while still maintaining compatibility with cross-distribution packages.


First you will need to create an AppFS package. Assuming you are in the root directory of the project and that you have built each component, try:

> appfs/appcreate test.afs
> mkdir mount
> appfs/appmount test.afs mount >/dev/null 2>/dev/null &  # See note.
> echo "my file" > mount/test
> # ... other operations here ...
> fusermount -u mount
> cd apputil
> ./apputil list ../test.afs
Opening ../test.afs ... 

At the moment the APIs are still under development (in particular the exposed APIs to Python for AppFS need to be more than load / unload / ls).

NOTE: AppMount currently runs in the foreground for debugging purposes, thus you need to use >/dev/null 2>/dev/null & in order to run it silently in the background.