Admin notice: please don't put emx-***@public.gmane.org AND ***@xfreeos2.dyndns.org
into your To: or Cc:, they are the same host, and result in duplicate
postings. One of them is sufficient (os2-unix is of course another list).
[...]
Post by Ilya ZakharevichPost by Holger VeitPost by Ilya ZakharevichWhat is "it"? People putting -DEMX_LARGE_FILES into GCCOPT?
If you need to recompile stuff anyway, there is no reason to remain
compatible to old conventions.
Since one does not need to recompile in most of the situations (i.e.,
when one does not need off64_t), there is every reason.
So you just open files and read them sequentially? You are sure that
stream I/O doesn't rely on seek/tell anywhere?
Post by Ilya ZakharevichPost by Holger VeitPost by Ilya ZakharevichTo take advantage of large files, one needs to use DosOpenL(). Using
L-version of seek()/tell() is secondary; moreover, no EMX_LARGE_FILES
is needed to support applications which do not need to seek far.
Effectively, DosOpenL *is* DosOpen *is* DosOpen2 *is* Dos16Open. Follow the
traces in the kernel.
I do not care about "effectively". If one does not use DosOpenL(),
one can't read/write files above 2G. I do not see why any other
argument is relevant.
You can but this is another story. You don't want to see that the whole
"programmers should use different APIs (fseek vs fseek64 or even open/open64)
when they want to read large files" argument is as stupid as Bill Gates'
comment that "640k is enough for everybody". This is a similar attitude as
this technical debate on optimizating the loader by use of ordinals vs.
named entries. The whole OS/2 kernel is full of suboptimal code - if one looked
at the thunking interpreter in DOSCALL1, one would avoid "32bit" Dos* calls
like a plague - topic shift.
Having more than one API for a similar purpose basically results in two
sets of tools; those that deal with small (<2G) files, and others that can
handle big ones. You surely want to add such garbage to autoconf/automake
rulesets, don't you?
[...]
Post by Ilya ZakharevichPost by Holger VeitThis is formally correct, but unacceptable for working ports.
This depends. Nobody complained about Perl (but Perl is a special
point, since one can edit a Perl script to avoid these calls).
Post by Holger VeitThe pair getuid/setuid may return or expect uid=0 all the time, but
not all software delivers this uid. Also code the changes the uid
(seteuid/reuid, etc.) might later expect that the returned is no
longer 0. The whole system works for nice weather conditions
only. Result for porting: short-circuit these functions and adjust
stuff as needed.
Then I see no reason why changing EINVAL return to anything else may
break anything.
Look at common daemon code that expects *not* to run as root. It issues a
seteuid to become another user (like 'mail' or 'oracle' or whatever) and
the call
a) fails with -1: correct error check will terminate the program.
b) succeeds, but is a NOOP. Later the deamon code will be very surprised
to find out it is still 'root': correct error check will terminate the
program.
If a person porting such a thing want to get it work, he will ignore
the known EMX behaviour and invent an own mechanism that returns the
"correct" behaviour for this process. Maybe by rewriting the logic of the
setuid family at least to the degree needed, or by commenting out error
checks. I don't know how many people have invented workarounds for
prominent problems like strcasecmp, or setuid/setpgrp/setsid, or setitimer.
strcasecmp is among that the most harmless candidate.
Post by Ilya ZakharevichPost by Holger VeitPost by Ilya ZakharevichThere are some broken ports lying around. Recompiling such a port
with new, more correct, headers/libraries will require some work.
If yes, I do not consider this as a valid argument against correcting
headers/libraries.
If you change headers, you modify semantics. I don't consider this as
preserving compatibility anymore.
There is a compatibility and compatibility. Making a former error
condition into something which is documented it might have happened is
of the latter ;-) kind.
I and common users don't distinguish between compatibility and compatibility.
The effect is just: this damn thing used to work befor, and now it doesn't
anymore. It doesn't help whether it is then documented.
Post by Ilya ZakharevichBut other people have other agenda. They need different approaches.
Maybe. Maybe not. But you should not forget that this here is not a
customer/vendor relation. The customers don't pay any efforts or spent
lifetime to the people who (could) contribute. This in turn means, according
to another proverb: If you pay the orchestra, you decide what they'll play.
Not these other people with their other agendas. As the EMX code is public,
anyone of these can, in full agreement with the GPL, modify anything from
the name to the content. Without any maintainer.
Post by Ilya ZakharevichOf course, if the "victim" would benefit from my "ideas and changes"
only, then this would be a kind of a skewed relationship ;-) - I would
provide all the changes, and all that the "victim" would do is
bothering me to make things better.
If you find such a person, well go ahead.
Post by Ilya ZakharevichBut there is another fundamental difference between you and me: it
looks like you believe that you (and me? ;-) are the *only* persons
capable of a contribution to EMX. My wish for coordinator clearly
I don't think so. I rather think that most people are afraid that their
contribution will affect the holy grail of compatibility that you and some
more people keep holding high. This is closely related to the question
of acceptance by "the community", or precisely, by a number of speakers
with their own agendas. libemu, or Posix/2, is an example of code that
was not accepted by the community, in that it was regularly used in ports
and continously improved to weed out the bugs. Why? My opinion is:
it was not fully integrated, and maybe at the moment it would be used, a
better and greater EMX would come up which would obsolete all this. Now,
I doubt that there will be a new EMX "threatening" (by EM, although I can't
read his mind), but the panic of suddenly becoming incompatible with whatever
mainstream one might imagine is a good explanation of why there is no
forthcoming. It was observable while people waited for the great Windows 95
(which supposedly did no longer rely on DOS), then on Win98 (which supposedly
was more stable because it was not based on DOS), then on WinME (no DOS, for
sure). At the same time, there was a rather stable OS for long already;
you know it, but it was not "compatible". Eventually, there was Win2K
(still not "correct") and WinXP - but meanwhile there is a whole new generation
of software and people forgot about their old software which no longer
works.
Watcom C/C++ is now OpenWatcom, so all complaints that this might have been
a good tool, but yet, it was too expensive are now void. But still it is
not dominant, as it is not "compatible".
Not that anyone now gets the impression that have, within this mail turned from"con-compatibility" to "pro-compatibility" - I am just giving an explantion
that people are trapped by the compatibility curse. M$ did the right thing,
from a technical point of view. They eroded the compatibility issue by
more and more adding new attractive features which forced programmers to
move on and forced users to upgrade.
The compatibility trap is deadly for OS/2 or eCS future, as it will
severely restrict the options. Now: "deadly" - there is the bad mouth
again: OS/2 is dead. Should say rather: stale mate.
Post by Ilya Zakharevichindicates the opposite: IMO, there are *many* people who can improve
EMX with a reasonable amount of effort.
Technically yes, no doubt. But why didn't it happen then? Don't repeat the
strawman "no maintainer" argument: it doesn't work: while many people might
not be a genius like EM to invent such a thing from scratch, they can
recompile it at least, with own (maybe just small) improvements. Add
strcasecmp aliases, and call this EMX 0.9d.1, or call it EMU 1.0.0, and
there is public code one epsilon better. Put it up at hobbes, and you are
done? You are not done, because the grail keepers will howl - how can you,
and ordinal 1234 is not okay for strcasecmp, you should better use 2000,
and some code might now no longer compile because there is a
#define strcasecmp stricmp in it, and anyway, this has discussed for long
and has been reported to EM, and will be done differently in the next EMX
patch, etc. etc. blurb. A technically skilled programmer will dare this
experiment once, and is then cured for ever from walking into an established
minefield.
Post by Ilya ZakharevichI even believe that there are many people who "sit" on
(almost-)ready-to-distribute solutions to EMX problems (like I do).
But you need a strawman to distribute this, or literally, burn instead of you?
Post by Ilya ZakharevichPost by Holger VeitPost by Ilya Zakharevicha) Have APIs conform to the documentation as much as possible;
b) Have the documentation conform to standards as much as possible;
c) Have support for as many APIs' entry points as possible.
I just do not see where the opposition of Unix/OS2/EMX comes into this
picture.
ANSI != POSIX.
??? So what?
You have a good chance to shoot yourself in the foot when you attempt to
serve two masters.
Post by Ilya ZakharevichPost by Holger Veita) and b) is secondary, nice to have
For me a) and b) are tantamount.
Post by Holger Veitbut c) helps the programmer.
Without a and b "c" is useless - what good is a feature if you do not
know what it will do. Without "c" one needs to reinvent the wheel
again - pitiful work, but doable.
c) is an as clean as possible Unix or POSIX API, so it is documented (this
is a) ). The emphasis is on "clean" not "many". I don't care about
some DOSish APIs like "_getdrive()", as long as they don't disturb
anything, they may remain there - but if they somehow do (say a
"readlink() which would return backslash paths) I'd drop them.
Post by Ilya Zakharevich"c" is nice to have, no more. And if one can add "c" via an external
library, with no support from EMX, there is no need to mix this into
the current discussion.
This effort turned out to be doomed - there is supposedly only one "libc",
not multiple ones. More helper libraries will mess up the build system
at some place.
Post by Ilya ZakharevichOf course, it does make sense to discuss which hooks one needs to add
to EMX to simplify addition of externally supported enhancements...
There used to be a distinction between Unix man(2) and man(3), something EMX
to some degree also separates. Provided this would be the borderline, one
would no longer need EMX at all; you could port libc-BSD or glibc on top
of that, and maybe add some OS/2 APIs like EA support afterwards. A design
that scatters hooks into internal structures and APIs all over the code
reminds me too much on the kernel and PMMERGE - IBM's compatibility curses.
Holger