Version 24 (modified by bonefish, 7 years ago) ( diff )


These are the TODO items for the Haiku Package Management.


  • Support packages being copied to the packages directory. Currently only moving works.
  • If necessary, add a caching mechanism to speed up mounting it.
  • Use a global string hash table to avoid allocating duplicate strings. Will reduce the memory footprint and speed up some code paths.

Build system

  • Before creating packages (e.g. the user guide), all files must be identified, since packagefs is read-only.
  • Add hybrid support.

Package building

  • Work on tools to build Haiku packages in a clean chroot environment.
    • Status: There's a package management branch of haikuporter which builds HPKGs. It doesn't do chroot building yet (requires pkgman to solve dependencies and install packages) and probably should use another recipe format (e.g. RPM .spec files).
  • Define packaging guidelines and create a tool to check packages those.
  • Adjust build "recipes" for HaikuPorts packages as needed and build the packages.
    • Status: There's a package management branch of haikuports with recipes for several packages already updated for building HPKGs.

Package kit/manager

  • Implement the package solver based on libsolv.
    • Status: There's a WIP port of libsolv. It's more or less complete and working OK as far as tested. The Haiku solver API is partially done.
  • Extend the package kit and the (CLI) package manager to support adding, removing, and updating packages. That probably also involves work on a server-side (i.e. repository) part.
  • Implement a GUI package manager.

Boot loader

  • Currently the stage 1 boot loader requires the stage 2 boot loader to be in the file system/haiku_loader on the BFS boot volume. Since the stage 2 boot loader itself should also be subject to package management, that means it currently the package manager has to extract it from the system package. It would be nicer, if the stage 1 boot loader could load the stage 2 boot loader directly from the system package. Since the space for the stage 1 boot loader is too limited to deal with the HPKG format (< 1 KB in total), the format would probably have to be extended to provide an easily accessible bootstrap code. Alternatively additional space for the stage 1 boot loader would have to be found/made in the BFS on-disk format.

Package/package repository format

  • Add a package attribute (string) that specifies a base package of a package. For most ported software, the files resulting from a built are usually separated into different packages (base, develop, debug-info, doc, etc.). All of these packages should be installed in the same installation location, since they have been built with the same installation prefix. In order to enforce such a constraint, one of the packages should be declared in the "requires" list of the others and they should additionally use the new attribute to identify it as the base package.
  • Remove B_HPKG_ATTRIBUTE_ID_PACKAGE_PROVIDES_TYPE ("package:provides.type"). The type is encoded in the name anyway.
  • Add support for repository keys (public/private) and package signing/check sums, so that it is possible to verify that data retrieved from a repository have not been tempered with.
  • Support compression for the whole heap instead of just for individual file data. This should improve compression rates especially for packages containing many small files with only a small drawback regarding removing/replacing files in packages (potentially the whole heap would have to be recompressed).


  • Modify Expander to use a directory instead of the expander.rules file. This way a package (like xz-utils or p7zip) can contribute a single file with the rules for its tools.
  • The MIME database is currently installed in "/boot/home/config/setting". The defaults MIME types built by the Haiku build system should be put in a package (probably the system package) and "/boot/home/config/setting" should just contain what the user has explicitly set. The registrar needs to be adjusted to support that.
Note: See TracWiki for help on using the wiki.