Linux-Development-Sys Digest #133, Volume #7      Wed, 1 Sep 99 01:14:02 EDT

Contents:
  Re: TAO: the ultimate OS (Christopher Browne)
  Re: TAO: the ultimate OS (Errin Watusikac)
  what's a "jiffy" in /proc? (Virginie Galtier)
  Re: Kernel compile problem with (P)GCC 2.95 (Dave Hearn)
  Re: why not C++? ([EMAIL PROTECTED])
  Re: Multipoint protocol? ("John S. Giltner, Jr.")
  Re: NFS caching (David Crooke)
  Re: Programming under XWindows (Olaf Klischat)
  Re: Accessing user space memory in kernel mode. (Kaz Kylheku)
  Re: need help on ptrace (David Powell)
  Re: Accessing user space memory in kernel mode. (Jeon Jong-Hwan)
  Re: Linux real-time clock Y2K support (Keith Wright)
  Get ETH hardware address from user program (Low Hsin Yee)
  Re: The optimization debate (was: why not C++?) (Stephen E. Halpin)

----------------------------------------------------------------------------

From: [EMAIL PROTECTED] (Christopher Browne)
Crossposted-To: alt.os.linux,comp.os.linux.advocacy,comp.os.misc,comp.unix.advocacy
Subject: Re: TAO: the ultimate OS
Reply-To: [EMAIL PROTECTED]
Date: Tue, 31 Aug 1999 23:54:17 GMT

[As always, redirected to comp.os.research, as this is neither
discussing UNIX nor Linux...]

On Tue, 31 Aug 1999 13:13:09 +0000, James Andrews
<[EMAIL PROTECTED]> wrote: 
>I'm sorry, I'm as skeptical as the next guy, but I'm afraid you're just
>being spiteful, for this reason, I think I'll sit and probe the errors
>of your logic for a change, give Vladimir a break.  I can abide flaming
>or dissent for a thread, but this one seemed a little lacking in the
>foundations... ok, where shall we start...

>> You wouldn't be able to access a filesystem anyway because you have to
>> make it impossible to open a file! Of course, these are all blind
>> assumptions-- I don't actually know anything about this sandbox concept
>
>So why are you arguing?  I think arguing with a point you dont
>understand, or claim to know anything about is blatant stupidity.  Why
>make blind assumptions?  

Indeed.  Both of you are missing one of the critical points of his OS
design:

  It doesn't have a filesystem, because that's a Silly Nonuserfriendly
  Computer-oriented Feature.

It is designed to use persistent objects instead.

..So if you're going to criticize the sandbox scheme, you have to
base it on the security scheme (that has not been described) for
management of persistent objects.

Mind you, Theodor Nelson was highly critical of the use of files back
in 1973 (Dream Machines/Computer Lib), and we haven't yet gotten to a
fundamentally better way of organizing data yet, some 26 years later.

[Note that the 1987 edition of Computer Lib adds in a discussion that
the "way to go" for security might well be to look at "capabilities."
When ESR was quoted a few weeks back in InfoWorld as suggesting that
EROS, a capabilities-based OS, might be the successor to Linux, it's
entirely fair to say that Nelson was there 12 years earlier...]
-- 
Replying to one's own message is a rarely-exposed technique for
switching positions once you have thought about something only after
sending mail.
-- from the Symbolics Guidelines for Sending Mail
[EMAIL PROTECTED] <http://www.ntlug.org/~cbbrowne/linuxkernel.html>

------------------------------

Crossposted-To: alt.os.linux,comp.os.linux.advocacy,comp.os.misc,comp.unix.advocacy
Subject: Re: TAO: the ultimate OS
From: Errin Watusikac <[EMAIL PROTECTED]>
Date: 31 Aug 1999 17:30:31 -0700

James Andrews <[EMAIL PROTECTED]> writes:

[---]
> suggests.  This is again a relatively simple concept, which gauging from
> your post, you wont get, so I'll put it simply.  The weaknesses in OS's

That's not nice.  It also doesn't make sense.

[---]
> 
> NO.  You don't, because it would be very silly, just because we cant see
> your face turn red doesnt justify this kind of pointless spam.  The
> biggest deficit imho of the net is that so many people realise that with
> the anonymity of the system they can be really annoying and no one can
> do anything about it.

First, the net is not anonymous to a determined party unless you go to 
extraordinary efforts to use anonymizers, etc.

Second, there are many net forums that at least require valid e-mail 
addresses so you can get your password into the forum.  Try those (eg
Freshmeat) if you like real names.  Few people cheat, I suspect.

Last, I find anonymity one of the best features of Usenet, Slashdot, 
Linux Today, etc.  Many opinions are seen that posters wouldn't want
their employers (current or future) to associate with them.  Postings
get a more interesting flavor when they're not self-censored by people
wishing to protect their reputations.  Anonymity reduces the risk of
retribution from immature and easily insulted but skilled hackers.

When anonymity is eliminated from the net (as I expect it to be in a
few years), you can be happy to know that I'll return to reading books.

------------------------------

From: Virginie Galtier <[EMAIL PROTECTED]>
Crossposted-To: 
comp.os.linux.development,comp.os.linux.help,comp.os.linux,comp/os.linux.misc
Subject: what's a "jiffy" in /proc?
Date: Tue, 31 Aug 1999 20:05:33 -0400

Hi

The proc man indicates that in /proc/<pid>/stat, utime is "The number of
jiffies that this process has been scheduled in user mode."

But I found 2 definitions for "jiffy" (in
http://foldoc.doc.ic.ac.uk/foldoc):

1. The duration of one tick of the computer's system clock.
2. Confusingly, the term is sometimes also used for a 1-millisecond wall
time interval.

So in the case of /proc/<pid>/stat, should I consider the first
definition or the second?

Thank you for your help

Virginie


------------------------------

From: Dave Hearn <[EMAIL PROTECTED]>
Subject: Re: Kernel compile problem with (P)GCC 2.95
Date: Tue, 31 Aug 1999 23:04:40 +0100


excuse my dumb question - did you run lilo before rebooting?

Andreas Spengler wrote:
> 
> Hi folks,
> 
> I recently upgraded my compiler to GCC 2.95 and now whenever
> I try to compile a kernel (tried it with 2.3.11-15 and 2.2.9) and do
> a make bzlilo, towards the end I get the warnings
> 
> Warning; using %eax instead of %ax due to ..... ???
> 
> When I reboot the system the kernel hangs at
> 
> Uncompressing Linux. OK. Booting kernel......
> 
> From then on I �ve to press the reset button to reanimate my system.
> 
> Does anyone know why this happens ???
> 
> Greets,
> 
> Andreas Spengler

------------------------------

From: [EMAIL PROTECTED]
Crossposted-To: comp.os.linux.development.apps,comp.os.linux.misc
Subject: Re: why not C++?
Date: Wed, 01 Sep 1999 00:46:33 GMT

In article <[EMAIL PROTECTED]>,
Nix  <$}xinix{[email protected]> wrote:
>Andomar <[EMAIL PROTECTED]> writes:
>
>[dereferencing NULL and pasing it to functions]
>> How else would you pass the char at address 0 ?  I mean,
>> there must be a way to allow that.
>
>You can't cast arbitrary ints to pointers in a Standard-conforming
>program, and pointers may have arbitrary internal structure. `Address 0'
>may be represented by something quite different to all-bits-0, and `0'
>(the null pointer constant) need not be represented by all-bits-0.
>
...<snip>...
The subject of this thread is why not C++?  I think it was why not for
writing an OS.  Could this be the answer?
- I'm not asking rhetorically; I really want to know.
I've stayed out of this thread because I'm not that much of an expert
on C++, but I've done my share of C and assembly language programming,
including working on device drivers and the like.
-- 
No statement is wholly true, not even this one.
    also: remove "UhUh" and "Spam" to get my real email address -----

------------------------------

From: "John S. Giltner, Jr." <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.hardware
Subject: Re: Multipoint protocol?
Date: Tue, 31 Aug 1999 21:01:59 -0400

What kind of sync board is it?
What is this "hub" like device you have?

I am new to Linux, however does the board, and Linux,  support X.25 or Frame Relay?
With X.25 or Frame relay you can setup a vitual circut (VC) between each of the 
computers you want to talk.  You can send IP over X.25 or
Frame Relay.

You make it sound as if you have this working now.  If so, how does you have it setup 
now.

Pablo Yaggi wrote:

>   
>------------------------------------------------------------------------------------------------------------------------------------
>
> Subject: Multipoint protocol?
> Date: Wed, 25 Aug 1999 13:08:22 -0300
> From: Pablo Yaggi <[EMAIL PROTECTED]>
> Newsgroups: comp.os.linux.networking
>
> Hi,
> I build a fast serial port board (sync type) for the isa slot.
> Now I have the following configuration, 3 PCs with that kind of boards
> on
> diferent subnets and a concentrator device that makes possible that all
> boards transfer to or recive from the others simultaniusly, this
> concetrator acts like a hub, but the devices attached to it doesn't have
> MAC addresses.
> I want to make a whole net with those PCs, so I could write a linux
> driver to use
> my boards like a 'cua' device, but what protocol do I have to use or
> how, to route the subnets to the whole net?. I can't use PPP because is
> a point-to-point protocol.
> Do I have to write my own interface driver, like 'eth' ones? if so,
> please give me some information about how to do it, because I don't have
> any :(.
> Thank's,
> Pablo Yaggi
> [EMAIL PROTECTED]


------------------------------

From: David Crooke <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
Crossposted-To: comp.os.linux.networking
Subject: Re: NFS caching
Date: Wed, 01 Sep 1999 01:05:04 GMT

Ross Vandegrift wrote:
> 

> bill davidsen wrote:
> >
> > Has anyone done anything to reduce network traffic between client and
> > server when the data on the server is known not to change? I'm being
> > very vague because I don't want to scare off any good solutions.

There is a cached implementation of NFS desgined exactly for this
purpose, e.g. for serving /usr/local for a roomful of workstations from
a central point. I believe the product "PC-CacheFS" is a version of this
sort of thing.

Dave
-- 
David Crooke, Austin TX, USA. +1 (512) 656 6102
"Open source software - with no walls and fences, who needs Windows
and Gates?"

------------------------------

From: Olaf Klischat <[EMAIL PROTECTED]>
Crossposted-To: 
comp.os.linux.development,comp.os.linux.development.apps,linux.dev.c-programming,linux.free-widgets.development
Subject: Re: Programming under XWindows
Date: 01 Sep 1999 04:26:02 +0200

"Darius Blaszijk" <[EMAIL PROTECTED]> writes:

> Hello there,
> 
> After making some small programs using GCC, I decided to start programming
> under XWindows. But somehow I cannot find the information I need.
> 
> First of all, what kind of software do I need to be fully equiped. I have
> the SuSe 6.1 distribution. (I'm used to program under WIN98 using DELPHI and
> I want to have the same sort of funcionality under LINUX)
> 

You might dip into GTK, which is a quite efficient and easy to use
widget set written in C.

Be aware, however, that GUI programming under linux/GTK is more a
matter of coding than a matter of pointing and clicking. There are GUI
builders for GTK, however -- have a look at glade
( http://glade.pn.org/ ).

> Second, where can I download the software I need extra?

Go to www.gtk.org. They have a convienient tutorial as a starting
point there, too.

If you prefer C++, take a look at Gtk--, which is a C++ wrapper around
GTK:
http://lazy.ton.tut.fi/terop/iki/gtk/gtk--.html

> 
> Third, can anyone explain me briefly how widgets work? Is it the same as
> components under DELPHI?

To a certain degree, yes.

The main difference is that, in Delphi, "Components" can be any kind
of objects, even invisible data processing facilities such as Database
accessor components.
The term "widget" in X windows, however, refers to visible components
such as buttons or textboxes only. As such, widgets are roughly
comparable to the Delphi "TControl" class (I think that's how it was
named...).
In GTK, you can manipulate widgets through their associated functions
( void gtk_label_set_text (GtkLabel *label, const char *str); , for
example) , and you can connect event handling routines to them if you
want to be notified whenever a certain aspect of the widget's state
changes.

HTH,
Olaf

------------------------------

From: [EMAIL PROTECTED] (Kaz Kylheku)
Subject: Re: Accessing user space memory in kernel mode.
Reply-To: [EMAIL PROTECTED]
Date: Wed, 01 Sep 1999 02:58:40 GMT

On Wed, 01 Sep 1999 02:46:22 GMT, Jeon Jong-Hwan <[EMAIL PROTECTED]>
wrote:
>If so, when can we use "copy_to_user" or "copy_from_user" function ?
>And what is differences between them ?

The get_user and put_user macros are for copying individual values of the basic
object types: bytes, integers, pointers.

The copy_to_* functions are for block copies.

------------------------------

From: David Powell <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.development,comp.os.linux.help
Subject: Re: need help on ptrace
Date: Tue, 31 Aug 1999 23:03:06 -0400
Reply-To: [EMAIL PROTECTED]

You need to convert the cmd line arg from a string to an int (or pid_t):

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/resource.h>       /* getrlimit */
#include <sys/ptrace.h>
#include <assert.h>             /* assert */
#include <signal.h>             /* sigaction */
#include <string.h>             /* memset */
#include <errno.h>


int main(int argc, char *argv[])
{
        pid_t   pid;

        if ( argc < 2 ) {
                fprintf(stderr, "usage: %s [pid]\n", argv[0]);
                exit(1);
        }

        sscanf(argv[1], "%d", &pid);
        printf ("pid of the process to trace: %d\n", pid);
        if ( ptrace(PTRACE_ATTACH, pid, 0, 0) == -1) {
                switch (errno) {
                case EIO:
                        printf("pb to attach %d: EIO\n", pid);
                        break;
                case EPERM:
                        printf("pb to attach %d: EPERM\n", pid);
                        break;
                case ESRCH:
                        printf("pb to attach %d: ESRCH\n", pid);
                        break;
                default:
                        printf(" error\n");
                        break;
                }
        }
        else {
                printf("%d attached\n", pid);
        }

        return 0;
}


In response to your other posting: jiffies are called "ticks" in other
UN*X-like things (like IRIX). It is the basic system clock global,
updated, in Linux' case, every 10 ms and used heavily by the scheduler,
etc.

My $.02: I'd ease up a bit on cross-posting questions like this.

-David



Virginie Galtier wrote:
> 
> Hi,
> 
> I try to understand how does strace work and I wanted to write a very
> simple version of strace by myself. But I don't even manage to control a
> 
> process with ptrace. Can anyone tell me why does the following program
> always end up with the ESRCH error?

...

> Thanks you
> 
> Virginie
-- 
David Powell
Manager, Gov't Technology Center
U.S. Federal Systems . The Americas . SGI

------------------------------

From: Jeon Jong-Hwan <[EMAIL PROTECTED]>
Subject: Re: Accessing user space memory in kernel mode.
Date: Wed, 01 Sep 1999 02:46:22 GMT

On Wed, 25 Aug 1999, Falk Lehmann wrote:
>> On Mon, 16 Aug 1999 11:07:43 GMT, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
>> >Which functions should i use to access user space memory in kernel mode?
>
>>
>
>Read the "The Linux Kernel Module Programming Guide" from LDP for sample code.
>If you program for an 2.2 kernel you can use the macros put_user(..) and
>get_user(...) which are defined in the header file asm/uaccess.h.
>
>Falk Lehmann
>[EMAIL PROTECTED]

If so, when can we use "copy_to_user" or "copy_from_user" function ?
And what is differences between them ?

------------------------------

From: Keith Wright <[EMAIL PROTECTED]>
Subject: Re: Linux real-time clock Y2K support
Date: 31 Aug 1999 23:42:03 -0400

"Ted Pavlic" <[EMAIL PROTECTED]> writes:

> Does anyone know of an application for Linux that will provide protection
> against real-time clocks that are not Y2K-compliant?

Yes, it's in the kernel.  When you boot, if the clock says the year
is 1950 or less, then the kernel adds 100.
See get_cmos_time in /usr/src/linux/arch/i386/kernel/time.c.

-- 
     -- Keith Wright  <[EMAIL PROTECTED]>

Programmer in Chief, Free Computer Shop <http://www.free-comp-shop.com>
         ---  Food, Shelter, Source code.  ---

------------------------------

Date: Wed, 01 Sep 1999 12:07:29 +0800
From: Low Hsin Yee <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.development.apps
Subject: Get ETH hardware address from user program

Hi,

   I have try to get the ETH Hardware address from user program using
ioctl(socket_fd, SICOCGARP &arpreq), but ioctl always return -1 (fail)
and errno is 22 (EINVAL).

   What is the proper way to read the ETH hardware address from user
program ? I need the ETH HW addr even if the arp cache is empty. 

   Thanks.

regards,
Hsin Yee

------------------------------

From: [EMAIL PROTECTED] (Stephen E. Halpin)
Crossposted-To: comp.os.linux.development.apps,comp.os.linux.misc
Subject: Re: The optimization debate (was: why not C++?)
Date: Wed, 01 Sep 1999 04:19:11 GMT

On Tue, 31 Aug 1999 02:18:04 GMT, [EMAIL PROTECTED] (Christopher Browne) wrote:

>On Sun, 29 Aug 1999 22:18:32 GMT, Stephen E. Halpin <[EMAIL PROTECTED]> wrote:
>>On 28 Aug 1999 18:07:27 GMT, [EMAIL PROTECTED] (Christopher Browne) wrote:
>>>On 27 Aug 1999 12:03:05 +0100, Paul Flinders
>>><[EMAIL PROTECTED]> wrote: 
>>>>[EMAIL PROTECTED] (Paul D. Smith) writes:
>>>>> On a micro level, I believe the best way is to write the code the most
>>>>> straightforward way possible first, _then_ when it all works, come back
>>>>> and see where you can tweak it to be faster.  Remember, slower, working
>>>>> code is always better than faster, broken code.
>>>>
>>>>That's true unless the very slowness _is_ the breakage.
>>>>
>>>>Also with more multimedia stuff fast but not completely accurate can be
>>>>preferable to slow but complete (i.e would you prefer speech recognition
>>>>which ran in real time but which occasionally got it wrong to speech
>>>>recognition which took 5 minutes to recognise 10 seconds speech but always
>>>>got it right).
>>>
>>>Slower, working code that reads in a straightforward manner, which
>>>thereby makes it easy to make code transformations, is easier to
>>>optimize than slightly faster code where bits have been tuned, and
>>>thereby are virtually non-modifiable.
>>
>>I think you missed the point of the previous poster.  He is not talking
>>about "slightly faster code", he is talking about a 30:1 difference using
>>heuristics to produce results which are probabalistically correct.  You
>>cant do it everywhere, but where you can do it, its a win.  Another
>>example of what the previous poster was getting at is lossy compression,
>>where MPEG can produce far better compression ratios for audio and video
>>than lossless compression schemes can, and its an acceptable tradeoff
>>in many cases.  On the other hand, you wouldnt store your company's
>>financial data using a lossy compression algorithm.
>
>The examples of "faster code" that have been quoted so far have
>amounted to:
>
>"reorder the loop so that it decrements rather than incrementing."
>
>That's not a fundamental algorithmic change that would change the
>order of complexity of the program.

You obviously didnt read either of our posts.  Speech recognition
and lossy compression algorithms are based on heuristics, where the
results arent always "correct."  Neither of these have anything at
all to do with the direction of a particular predictable loop.

>My contention is that there is little merit to looking for those
>little reorderings; better to write straightforward code, that will be
>easier to mutate when analysis is done to find bottlenecks.
>
>It absolutely is the 30:1 improvements, or 300:1 improvements, that
>are the primary optimization goal.
>
>By trying to get the 10% improvements early in the game, that is
>liable to make it harder to go after the bigger gains that can come
>later once the full scope of the system is known.

As the previous poster noted, "that's true unless the very
slowness _is_ the breakage."  When you are doing signal
processing and you get 10 instructions per sample, and you
have no hardware buffering, a 10% improvement is the difference
between working and not working.  Getting 10% performance
improvements in FFTs, FIR filters, and any other routine that
ends up in a library can benefit from optimization before the
full scope of a system is known.  This doesnt mean that all
optimizations can occur early in a program, nor does it mean
that all optimizations can be localized to single components.

>   "Optimization hinders evolution."  -- Alan Perlis

"Evolution depends on optimization."  -- Steve Halpin

The nature of optimization is to make something more
effective, or more useful.  This includes not only
optimizing for time or space, but for generality,
adaptation or growth.  The nature of evolution is
development, and the nature of development is to make
something more effective.  Optimization is therefore
a fundamental component of the process of evolution.

>Once optimized once, it's harder to optimize the code again.

If this werent true, all processes would converge to O(1),
and all data sets would compress to a single bit.  Ultimately
there is a minimum amount of work that has to be done to
perform every task, and you cant optimize a process beyond
that minimum.  Its not unusual or unexpected for this bound
to be approached asymptotically.  Outside a particular context,
you cant generalize this to imply when any optimization may be
made to have the best chance to achieve that minimum, and
indeed, poor system design can prevent later optimizations
from being effective without redesigning the whole system.

>>More to the point you make, there are times when slightly faster is
>>the difference between working and not working in a hard real-time
>>system, and you have to live with it.  Its all part of the tradeoffs
>>that an engineer must make.  If you havent seen the code for a box
>>where 100% of code and data memory are used and it runs hard real-time
>>at >98% utilization, its quite a sight :->
>
>Some years ago, I worked on a financial system where they "optimized
>too early."  (A prototype that was a "6 month stopgap fix" stayed in
>production for 6 years...)
>
>The bank wanted us to mutate it into something new, when what was
>truly necessary was to throw out the whole system and rearchitect
>something new *from scratch.*
>
>The notable problem with it was the date format; YYMMDD was mandated,
>and when the system was managing pensions, there were ample
>opportunities for *BAD* "Y2K" errors what with there being a few
>people left with birthdates in the 1800's, and virtually everyone over
>70 years of age.
>
>There were a couple of "windowing" algorithms in use; once 1994 came
>along, 6 year bond certificates started encountering calculation
>problems, and when there is a billion dollars being managed, this is
>just a bit of a problem...

I guess the question is "did these changes make the system more
effective or more useful?"  If not, the >system< was not optimized.

On the other hand, if the process of developing the solution twice
allowed the bank to keep itself on line when it otherwise would not
have been, and the cost of the two developments was less than the
cost of not having the first system online for that 6 month stopgap
period, the process was optimized.  "Effective" and "useful" have
to occur in some context, and optimization must be evaluated in that
context.

>The system had been tuned up several times by the time I got to it; it
>was nigh unto impossible to modify.  The system was retired in 1994;
>replaced by something new(er).
>
>There were lots of cases in this system of reports that ran for many
>hours due to less-than-intelligent selections of database indices;
>very often there were opportunities for *HUGE* performance
>improvements when we changed a few loops to pick more appropriate
>indices.  

Some of these problems can be seen as far back as the design phase
of a project.  If you had to scan a 512MB character array on a machine
with 16MB of memory and a 4K page size, you wouldnt scan every 4096th
character from 0, then every 4096th character from 1, etc...  You would
scan through the array linearly to read the page set once instead of
4096 times.  The same goes for scanning memory arrays which are far
larger than the processor cache.  On the other hand, if the traversal
of the data was based on some external source, one would have to analyze
the behavior of that source before being able to determine how to store
and access the data effectively.  If that analysis could only occur after
the system was built, then indeed your point is valid.  Various scheduling
algorithms, from processes to disk access to networking can fall into this
catagory.

>That was easy enough in cases where report structures had not been
>tuned too much; it proved more difficult when previous programmers had
>started optimizing too early.

>From what you present, the problem wasnt when to optimize but
what to optimize.  Indeed, one would want to use the principles
of optimization from the beginning of a project as requirements
are first defined, as some tradeoffs must be made that far back
in a programs life cycle.  It really is more complicated than
"just do it at the end of the development cycle."

>-- 
>"Optimization hinders evolution."  -- Alan Perlis
>[EMAIL PROTECTED] <http://www.hex.net/~cbbrowne/lsf.html>

-Steve

------------------------------


** FOR YOUR REFERENCE **

The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:

    Internet: [EMAIL PROTECTED]

You can send mail to the entire list (and comp.os.linux.development.system) via:

    Internet: [EMAIL PROTECTED]

Linux may be obtained via one of these FTP sites:
    ftp.funet.fi                                pub/Linux
    tsx-11.mit.edu                              pub/linux
    sunsite.unc.edu                             pub/Linux

End of Linux-Development-System Digest
******************************

Reply via email to