Stupid bash question

Khoa Ton khoa at puresynergy.com
Wed Dec 12 17:11:11 UTC 2007


Ralf Corsepius wrote:
> On Wed, 2007-12-12 at 01:49 -0800, Khoa Ton wrote:
>> Ralf Corsepius wrote:
>>> On Wed, 2007-12-12 at 00:01 -0800, Dean S. Messing wrote:
>>>> Ralf Corsepius wrote:
>>>> : On Tue, 2007-12-11 at 21:29 -0800, Dean S. Messing wrote:
>>>> : [1] http://cvs.savannah.gnu.org/viewvc/gnustandards/gnustandards/standards.texi
>>>> : 
>>>>
>>>> Thanks, Ralf, for enlightening me.  I wrote "new coding standards",
>>>> above, in response to Stepan Kasal's remark that "GNU Coding Standards
>>>> now declare ...".  I suppose the latter is literally true even if the
>>>> Standard was defined in 1992.
>>>>
>>>> Of course, with this new knowledge, I will feel as free as a bird to
>>>> boldly ignore the Standard (in this respect) seeing how several other
>>>> prominent linux executables (busybox, lvm, dump/restore, halt, to name
>>>> a few) have been blithely ignoring it for more than a decade.  ½:-)
>>  >
>>> Well, of cause it's everybody's freedom to ignore the "insights" others
>>> have accumulated over many years. But also consider, there are good
>>> reasons why these recommendations exist and why some people consider
>>> programs changing their behavior upon program name to be mal-designed.
>>>
>>> Ralf
>> I would appreciate explanations or pointers to the reasons why some
>> people consider programs changing their behavior upon program name to be
>> mal-designed.
> In short: It's unreliable.
> 
> A lengthier answer:
> 
> 
> There are several aspects:
> 
> 1. GNU programs tend to be installed under alternative names, often in
> parallel to OS-vendor supplied programs, often into the same directories
> or at least into the same PATHs as OS-vendor supplied programs. 
> 
> Think /usr/bin/make vs. /usr/bin/gmake vs. /usr/bin/gnu-make
> vs. /opt/gnu/bin/make vs. E://com/linuxmake.exe vs. ~/check (because
> some user copied over /usr/bin/<app> to ~/ because wants to experiment
> with it).
> 
> Any heuristic to examine argv[] or argv[0] can't avoid to fail somewhere
> or at least can't avoid to be somewhat unreliable/unsafe. It's
> completely out of an implementors/coders control what a user might be
> using as final program name.
> 
> 
> 
> 2. Technical limitations.
> Checking a program's name is not as trivial as it might seem.
> - Some OSes mandate program suffixes. A well known example is "*.exe",
> but there might be naming conventions on $WEIRDOS, coders/implementors
> have never seen before.
> - On some OSes, argv[0] is not available (E.g. some embedded OS don't
> support it), on some OSes argv[0] carries an absolute path, on some OSes
> only a program's basename.
> 
> 
> Now consider that these limitations are pretty easy to overcome.
> - GNU Standards recommend recommend using an option instead of
> name-magic. Most programs already will have option processing, so the
> price of adding them should be pretty small.
> 
> - An alternative to using options is would be to split the executable
> and build several separate apps from them.
> 
>> For statically linked executables in disk space critical environments,
>> busybox's use of this mechanism is rather elegant.
> _statically_ linked in _space critical_ environments. ... That's a
> special case, which would touch different questions.
> 
> Just take the GNU Standards as "recommendations, generations of smart
> people have invested their brains in" - They are not a law. They help
> circumventing some issues commonly met on "standard GNU platforms", but
> they also have trade-offs and come at a price.
> 
> Ralf

I appreciate your concise and thorough explanations, Ralf.

Khoa




More information about the fedora-list mailing list