From Fedora Project Wiki

< PackagingDrafts

Revision as of 22:34, 23 August 2008 by Salimma (talk | contribs) (Initial draft)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

GNUstep Packaging Overview

This section documents the various GNUstep packaging layouts. The current Fedora layout is contrasted to that used by other distributions, highlighting several issues. The next section discusses the pros and cons of alternative layouts; experienced GNUstep developers and users are invited to participate in this discussion.

What is GNUstep?

(from http://gnustep.org/)

GNUstep is a cross-platform, object-oriented framework for desktop application development. Based on the OpenStep specification originally created by NeXT (now Apple), GNUstep enables developers to rapidly build sophisticated software by employing a large library of reusable software components.

Filesystem Layout

Bundles

A characteristic of OpenStep/GNUstep/Mac OS X is that applications are shipped as bundles. Similar to how object-oriented programming combines data and related operations, an application bundle is a directory that contains the binaries associated with an application as well as the application's data files and the metadata required to integrate the application into the desktop.

GNUstep or FHS

Traditionally, GNUstep uses its own filesystem layout, installing everything under /usr/GNUstep. Linux distributions that ship GNUstep packages, however (Debian, openSUSE) package GNUstep using the Unix FHS layout.

"Fat" unflattened layout

When using the traditional GNUstep layout, architecture-dependent files are organized in a tiered layout, for example, an application bundle looks as follows:

hello.app \-- Contents |-- Resources |-- i386 -- linux-gnu -- gnu-gnu-gnu -- hello |-- x86_64 -- linux-gnu -- gnu-gnu-gnu -- hello

This unflattened layout allows for libraries and applications to be shared (for example, on an NFS share) between machines of different architectures, running different operating systems.

Similarly, core binaries and libraries (e.g. from gnustep-base and gnustep-gui) are installed under a <arch>/<os>/<lib> hierarchy, allowing for multi-arch binaries and libraries to coexist on the same directory tree.

Flattened layout

When using the Unix FHS layout, GNUstep defaults to using a flat layout: Base binaries are put in /usr/bin and base libraries in /usr/lib. Note that for RPM multilib distributions such as Fedora and RHEL, the library path would have to be overridden in gnustep-make to use %{_libdir}.

There is a disadvantage to the flattened layout, however: it disables GNUstep's excellent multi-arch support.

Fedora today

Fedora's gnustep-make currently is configured to use FHS and an unflattened layout. This allows for compliance with the FHS layout used in the rest of the project, while still allowing for application bundles. This configuration, however, is not commonly used, and causes some conflict between GNUstep packages and other Fedora packages that require a discussion of what changes we need to make in our GNUstep packaging.

Using --with-layout=fhs-system --disable-flattened, the following incompatibilities currently exist:

- Unflattened binaries are put in %{_bindir}/<arch>, conflicting with util-linux-ng, a core Fedora package, in which files with the same name already exist, and are wrappers around setarch.

- Unflattened libraries are put in %{_prefix}/lib/<arch>. While this does not cause any conflict, it deviates from the Fedora practice of putting libraries in %{_libdir}.

Alternatives

Use GNUstep layout

Use FHS flattened layout

Use FHS unflattened

Handling binaries

Placement of libraries