[top] [up]

Gnu System Design Wishes

  1. Directory structure ideas
  2. Filename Suffixes for CJK TeX Preprocessor Sources
  3. WWWBROWSER environment variable and mozillaclient

1. Directory structure ideas

  1. Basis of the discussion: Existing standards
  2. Documentation Directories
  3. Source Format Fonts
  4. /variability during normal operation vs during system update

1.1. Basis of the discussion: Existing standards

Some aspects of these standards need to be elaborated and/or streamlined.

1.2. Documentation Directories

future dircontentspreviousrationale
/usr/share/docdocumentation root/usr/docDocumentation data is invariable and shareable across systems.
<path>/manmanpages for stuff in <path>/bin<path>/manunchanged
/usr/share/doc/manMan pages that are not related to a certain PATH of executable files This could for example be manpages related to directory structures or system configuration. Those manpages whose lookup depends on how PATH (and consequently) are set, need to go into extra directories like /usr/man, /usr/local/man.
/usr/share/doc/infoTeXInfo documentation/usr/infoUnlike with /usr/man, there is no reason to keep any /usr/info files separate from the documentation tree. Info is a navigatable hypertext system that needs to stay in one path rather than be scattered across the system like man.
/usr/share/doc/wwwWWW based (HTML, XML etc) hypertext documentation, weaved together as a whole, all accessible from a common index.html This web-based alternative to the info system does not exist yet, but people have talked about wanting to create it. There could even be a /usr/share/doc/www/man.php3?prog=ranlib or similar query interface that could then be hidden behind w3man ranlib.
/usr/share/doc/packages/contents of documentation corresponding to RPM/Deb packagesSuSE /usr/doc/packagesSplitting documentation according to the RPM/Deb/.. packages of the utilities that it documents is a special classification principle that does not apply to the whole documentation tree. Therefore a special tree should be created for it, in analogy with the tree for the packages sources themselves. Packages that contain only documentation (eg. howtos.rpm) do not belong into the package documentation tree, because they do not refer to the contents of any package.
/usr/share/doc/<genre>/<lang>/Non-package-specific Documents of special genres like HOWTO, FAQ, RFC, Books in language <lang> (e.g. en de fr: ISO 639 two-letter code)like SuSE /usr/doc/howto etc 
/usr/src/packages/<type>/tree RPM/Deb sources of RPM/Deb packages. Values of <type> can be rpm, deb and others.like SuSECurrently this has many different names. The name /usr/src/redhat proposed by the RPM developpers is misleading, and having every distributor rename it, e.g. to /usr/src/turbo as done by TurboLinux, is not an alternative.

1.3. Source Format Fonts

There should be a special uniform directory structure for fonts in generally usable source formats like TTF, PS, MF. Only fonts in application-specific formats derived therefrom, such as PCF or PK should be stored somewhere else, in a more application-specific location.

  1. Proposal
  2. Rationale

1.3.1. Proposal

/usr/share/fonts/<format>/<coding[-range]>/<foundry>/<name>[/<subrange>]

format:
ttf, ps-pfa, ps-pfb, ps-cid, ot, mf, bdf etc
coding[-range]:
ucs, ucs-planes-1, ucs-planes-1-3+5-6, big5, iso8859-1 etc
foundry:
adobe, bitstream, wadalab, dynafont, font21 etc
name:
palatino, courier, fangsong etc
subrange:
in case of large fonts or cooperative foundry work, subdivisions may be useful

1.3.2. Rationale

  1. Why subdivide by <format> first?
  2. Why not allocate an extra directory level for subtypes of formats?
  3. Why subdivide by <coding> next?
  4. Why not allocate an extra subdirectory for the coding-range?
  5. Why subdivide by <foundry> next?
  6. Why allocate an extra subdirectory for the <subrange>?
1.3.2.1. Why subdivide by <format> first?
  1. Programs are first of all interested in formats. There is always one program/module that can handle truetype and another that can handle metafont.
  2. People can handle the format distinction with less uncertainty than any other distinction. When no CID rendering machinery is available, the administrator may want to move away all CID fonts with one command.
1.3.2.2. Why not allocate an extra directory level for subtypes of formats?
  1. We want to keep a consistent number of subdirectories, so that globbing expressions like /usr/share/fonts/*/ucs/ will work.
  2. The criteria for subclassification are often unclear.
1.3.2.3. Why subdivide by <coding> next?
  1. Programs are next interested in the coding. The coding is a special parameter that every program must know, and many programs can only handle certain codings. Programs do not care about foundries and names, but they do care about formats and codings.
  2. The coding distinction roughly corresponds to a language distinction. Administrators can handle this distinction easily. When a certain language cannot be supported on the system, the administrator may want to move away all fonts of that language.
1.3.2.4. Why not allocate an extra subdirectory for the coding-range?
  1. Many codings do not have subranges. The tree is easier to handle, if there is a consistent number of subdirectories.
  2. UCS, which may eventually become the only coding, is so large, that it will necessarily be divided into subranges. One UCS subrange roughly corresponds to one legacy coding.
1.3.2.5. Why subdivide by <foundry> next?
Programs are least interested in who is the foundry. Even peole are more interested in shape and style than in the foundry. But shapes and styles are difficult to formalize into classification criteria. Therefore shapes and styles are often referred to intdirectly by naming the foundry and a font name (e.g. Adobe Helvetica), just as a symphony is referred to by the naming the composer and a number.
1.3.2.6. Why allocate an extra subdirectory for the <subrange>?
Some fonts need to be stored in several files. In this case, there should be an extra directory level. This subdivision can be useful for:

  1. letting programs conveniently load subranges of huge fonts, e.g. the Arabic range of a complete UCS font.
  2. organising volunteer cooperative font designing work: one person may be responsible for a certain range of Han characters that are stored in a separate file.

Allocating this extra level does not make globbing / regexp searching on the directory structure significantly more difficult, because the subdivision is occuring only at the end.

1.4. /variability during normal operation vs during system update

There should be a clear distinction between those variable data that are written during normal system operation and those that are written during a system update.

When a new printer is added to the TeX system, this is a modification of the system, and the variable data produced by texconfig needn't go into /var/lib/texmf, but rather belong to a configuration hierarchy like /etc/texmf or to /usr/share/texmf itself, which is not considered to be read-only even during installation and extension of the system itself. A reason to nevertheless use /var/lib/texmf could be the wish to add printers that are both only preliminary local solutions (i.e. non /usr/share) and shareable across a network (i.e. non etc). Still, in this case at least all other printer drivers should go into /usr/share/texmf, and the /var/lib/texmf solution is only a private local one that needn't be of concern to the system standard designer.

Likewise, there can be some doubt as to whether /var/lib/rpm is the right place for the rpm database. This database is only written to when the system itself is changed. This would be a reason to place it in /etc/ rather than in /var. Another reason would be that, unlike /var/lib/texmf, are system-specific and not shareable. RPM offers an interface library that allows alien programs to query and even write to its database. The database is therefore of systemwide concern and belongs into something like /etc/rpm/db.

Althought the two above examples may not seem totally cogent, there is a need for clarification of the notion of variability. Otherwise the borderlines of the /var tree may be gradually blurred.

2. Filename Suffixes for CJK TeX Preprocessor Sources

The .tex filename suffix should be used only for files that can be directly compiled by LaTeX without any preprocessing.

To make CJK LaTeX files with Chinese big5, Japanese sjis and some other specially coded characters acceptable for LaTeX, special preprocessing with programs like sjisconv, bg5conv, cefconv etc is needed. The LaTeX source files understood by these preprocessors are not .tex files but should have the special suffixes, see table below.

Moreover, since many people will want to write their TeX source in UTF-8 and use a preprocessor before handing it to a non-Unicode TeX, some special suffixes are needed for these UTF-8 files also.

Using special suffixes allows LaTeX and other programs to recognize which files it can compile directly and which preprocessors have to be applied, and makes it easy to automatically create makefiles for generating all the target documents (eg. PS, PDF) from the source.

The file magic database /etc/magic should be updated so as to recognize the preprocessable file types.

file(1) outputfilename suffix
input text for LaTeX preprocessor sjisconv.sjtex
input text for LateX preprocessor bg5conv.b5tex
input text for LaTeX preprocessor cefconv.cftex
input text for LaTeX preprocessor cef5conv.c5tex
input text for LaTeX preprocessor cefsconv.cstex
utf-8 source of input text for LaTeX preprocessor sjisconv.ustex
utf-8 source of input text for LaTeX preprocessor bg5conv.ubtex
utf-8 source of euc-cn input text for LaTeX.uctex
utf-8 source of euc-jp input text for LaTeX.ujtex
utf-8 source of euc-kr input text for LaTeX.uktex

3. WWWBROWSER environment variable and mozillaclient




http://www.ffii.org/~phm/gnuselpla/indexen.html
2000-05-07 PILCH Hartmut