With various corrections and enhancements. More suggestions? (Take
your time; I'm learning Mailman's layout.)
- Stephen
----
PSARC/2006/xxx
/usr/gnu
Stephen Hahn (sch at sun.com) and Bart Smaalders (barts at eng.sun.com)
1. Summary
A new directory hierarchy, to contain otherwise-name-conflicting GNU
utilities under their original names, is proposed. A guideline for
the provision of 'g'-prefixed variants in /usr/bin is also
presented.
This case seeks Minor release binding.
2. Discussion
In an attempt to provide a more complete offering for software
developers on OpenSolaris distributions (as well as other goals),
this case proposes the introduction of /usr/gnu as a location for
alternate implementations of standard tools produced by the GNU
project. This case supplements PSARC/2005/185, "Enabling
serendipitous discovery" [1]. The goals of the two cases are
aligned; this case may propose refinements to the handling of
specific scenarios.
| For the purposes of determining candidates for the GNU environment,
| the GNU packages of the FSF/UNESCO Free Software Directory are
| considered the authoritative list [2].
|
2.1. Expected use
| Much like the use of the XPG4 [3] and XPG6 [4] environments, the
expected use of the /usr/gnu environment is to prefer its
binary components to the system defaults, via a setting like
PATH=/usr/gnu/bin:...:/usr/bin
Traditionally, the commands environments are incomplete: they do
not provide entries for each and every command available in
/usr/bin. The environments are also proper subsets: there are no
commands that are not also present in the system's default command
environment. Although an environment could be modified to be a full
alternative commands environment, that aspect is left to a future
discussion.
2.2. Reliance on /usr/gnu/bin utilities
The individual utilities' stability levels dictate their
appropriateness for use by other components.
2.3. Utility parity requirements
| PSARC, in its opinion for PSARC/2005/683 [5 - 6], made policy a
technical requirement that XPG4 and XPG6 extensions be also made
available in the /usr/bin variant of the affected utility. This
| policy is not a requirement for the /usr/gnu environment; project
| teams may choose to enhance partially or completely the /usr/bin
| variant as part of providing a /usr/gnu utility.
2.4. 'g' Prefixing
Historically, introduction of GNU utilities into /usr/bin has been
done with a 'g' character prefixed to the utility name. This
| proposal amends this practice: the 'g'-prefixed variant should be
provided if already introduced. In cases where another operating
| system has provided a 'g'-prefixed variant, the project team
| introducing an otherwise-name-conflicting GNU component may choose
to also provide one; otherwise, additional 'g'-prefixed components
in /usr/bin are discouraged.
GNU components that do not conflict with existing or anticipated
components in the system's default commands environment should not
be placed in /usr/gnu, and do not require 'g'-prefixing.
2.5. Manual pages
In the interest of reducing manual page scavenger hunts, this
proposal recommends the introduction of a new manual page section,
| to be represented in manual page text as "1GNU", to cover the
| introduced utilities. (Sections 1MGNU, 3GNU, and so forth can be
| added as necessary.)
Management of the manual path then proceeds along similar lines as
the executable path in Section 2.1:
MANPATH=/usr/man,1gnu,1
to prefer the GNU project environment reference manual, and
MANPATH=/usr/man,1,1gnu
| to use the GNU environment manual as a fallback (for searches of the
| entire manual page collection). If additional manual page sections
| are required, they should also be named with a "GNU" suffix and the
| section directory extended with a "gnu" suffix.
| In the standard configuration, the 1GNU section will follow the
| default 1 section in the default search order.
|
| 2.6. Other filesystem locations
|
| With the introduction of zones, customizable directories must be
| kept out of /usr to make sparse zones practical. This case reserves
| /etc/gnu and /var/gnu as locations for customizable files required
| by the tools present in the environment, but does not mandate their
| introduction until an explicit consumer is proposed.
|
| 2.7. Future possibilities
One possible future direction is to extract the legacy tools from
/usr/{bin,sbin} and provide them in a new, stable path like
/usr/sunos/{bin,sbin}. The selection of the top-level /usr
components can then be made a configurable aspect of the system, via
one or more mechanisms. This change might also involve the
provision of complete commands environments, as mentioned in Section
2.1.
3. Interfaces
| /usr/gnu Directory hierarchy Stable
| /bin
| /sbin
| /lib
| /info
| /etc/gnu Directory hierarchy Stable
|
| /var/gnu Directory hierarchy Stable
|
| /usr/share/man/man1gnu
| Manual page section Stable
4. References
[1] B. Smaalders, PSARC/2005/185: Enabling serendipitous discovery,
2005.
| [2] Free Software Foundation, FSF/UNESCO Free Software Directory, "All
| GNU Packages", 2006 (http://directory.fsf.org/GNU/).
|
| [3] J. Tornatore, PSARC/1994/161: XCU4 Conformance (XPG4
Commands/Utilities component), 1994.
| [4] J. Farley, PSARC/2003/418 SUSv3 Project Update, 2003.
| [5] C. Fields, PSARC/2005/683: Add /usr/xpg4/bin/crontab and
/usr/xpg6/bin/crontab, 2005.
| [6] B. Sommerfeld et al, PSARC/2005/683 Opinion, 2005.
--
Stephen Hahn, PhD Solaris Kernel Development, Sun Microsystems
stephen.hahn at sun.com http://blogs.sun.com/sch/