I am sponsoring the following case for Bart, Rainer, and myself. It
seeks Minor release binding, and is set to time out on 31 January.
The case has been built up by discussion in the Desktop and Tools
communities, and also in the SFW NV project. Past threads started
at
http://www.opensolaris.org/jive/thread.jspa?threadID=20197
and
http://www.opensolaris.org/jive/thread.jspa?threadID=8631
http://www.opensolaris.org/jive/thread.jspa?threadID=8486
http://www.opensolaris.org/jive/thread.jspa?threadID=8403
http://www.opensolaris.org/jive/thread.jspa?threadID=8352
Draft manual page and command synopses appendix to follow.
Thanks
Stephen
----
PSARC/2007/047
/usr/gnu
Stephen Hahn (sch at sun.com), Rainer Orth (ro at techfak.uni-bielefeld.de),
and Bart Smaalders (barts at eng.sun.com)
ident "$Hg: d-usr-gnu-fast-track.txt f86d9ec9092d 2007/01/22 11:52:13 -0800 $
SMI"
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 more general
goals of including useful software), 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], XPG6 [4], and SunOS/BSD
compatibility 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. In the past, the environments have also been proper
subsets of the system default commands: there are no commands that
are not also present in the system's default command environment.
In the case that an environment composed of the non-conflicting GNU
components plus the historical variants is desired,
PATH=/usr/bin:...
is sufficient.
The manual page path will be managed similarly. (Use of the
per-section ordering support man(1) allows in MANPATH was
considered, but is not suitable for heterogeneous environments.)
Extended discussion led to an aesthetic preference for a complete
environment, in which all components of the installed upstream
package were in their normal locations within /usr/gnu. (We return
to this point briefly in Section 2.5.)
Although an environment could be further modified to be a full
alternative commands environment, that aspect is left to a future
case.
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.
(As an aside, project teams stuck on replacement of, enhancement of,
or providing an additional variant for a particular command should
recognize that their decision may have architectural aspects--shared
components and comparative stabilites, for example--but is primarily
an economic one. For instance, if an upstream variant is abandoned
or undergoing remarkable change, then it is unlikely to have
economic advantages over enhancing a known version.)
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 (or any other path) 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. Exceptions
should reference specific examples--other operating systems,
dependent software, etc.--supporting the common use or inclusion of
the 'g'-prefixed name. Both 'g'-prefixed and non-conflicting
interfaces will provide access via /usr/share/man to their manual
pages. (Such access may be implemented via symbolic links, for
example.)
2.5. Library components
Although the primary focus of this case is the introduction of
/usr/gnu for commands components, we can also make recommendations
for the provision of library components under /usr/gnu. Similar to
the commands, conflicting libraries should be placed in
/usr/gnu/lib. In addition, non-conflicting libraries that depend on
a conflicting library should also be placed only in /usr/gnu/lib.
Otherwise, non-conflicting libraries should be placed in
/usr/gnu/lib, with appropriate symbolic links in the appropriate
/usr/lib subdirectories.
At this point, it is recommended that components that introduce a
"libexec" directory [7] leave that directory under the /usr/gnu
hierarchy. Once a non-GNU component introduces /usr/libexec, this
recommendation can be reviewed.
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 and their subdirectories 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.
Since the GNU components, while the primary sources, are not the
sole sources of Info format documentation, and due to the nature of
the Info "dir" file, the Info files shall be installed in
/usr/share/info. This directory and /usr/gnu/share/info are
expected to be equivalent--separated sets of Info documents (GNU
components alone and the complete Info set) are not required by this
proposal.
Otherwise, and with the exception of the 'g'-prefixed components and
the recommendation on library components above, the /usr/gnu
hierarchy will be populated in accordance with the GNU coding
standards [7]. (The specific exceptions are that the localstatedir
and sharedstatedir settings will be "/var/gnu" and "/var/gnu/com",
respectively, and the sysconfdir will be "/etc/gnu".) The most
common directories are given in the Interface Table in Section 3.
2.7. Manual page modifications
Because the commands involved may change at distinctly different
rates than the Single Unix specification, it seems prudent to modify
the manual pages of GNU components separately from the manual page
of a conflicting base components. (In contrast, OpenSolaris manual
pages have unified base and XPG4/XPG6 variants into a single page.)
On each manual page associated with a conflicting command, a
sentence similar to the following will be added to the "NOTES"
section:
The FSF/GNU implementation of the 'ls' command can be found at
/usr/gnu/bin/ls. (See gnu(5) for additional details on FSF/GNU
commands.)
The "SEE ALSO" section will minimally point to gnu(5).
2.8. Packaging and availability
In general, project teams are strongly encouraged to match a package
boundary to the upstream source boundary. By default, these new
packages should be made available in either the User or Developer
metacluster, to increase the likelihood of their availability in
typical installations.
2.9. 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/share/info
Directory Committed
/usr/gnu Directory hierarchy Committed
/bin
/sbin
/include
/lib
/libexec
/share
/share/info
/share/man
/etc/gnu Directory hierarchy Committed
/var/gnu Directory hierarchy Committed
/com
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.
[7] Free Software Foundation, GNU Coding Standards, 2006
(http://www.gnu.org/prep/standards/standards.html#Directory-Variables).
--
Stephen Hahn, PhD Solaris Kernel Development, Sun Microsystems
stephen.hahn at sun.com http://blogs.sun.com/sch/