Commit 13f97bf0 authored by Linus Torvalds's avatar Linus Torvalds

Linux 1.0

CHANGES since 0.99 patchlevel 15:

- removed all the bugs, of course.
- networking fixes.
- more changes than I really wanted..

[original announcement below]

Linux 1.0---A better UNIX than Windows NT

Summary: Linux 1.0 released
Keywords: Linux Kernel 1.0 Academy Awards
X-Moderator-Added-Keywords: universe, end of

Finally, here it is.  Almost on time (being just two years late is
peanuts in the OS industry), and better than ever:

	Linux kernel release 1.0

This release has no new major features compared to the pl15 kernels, but
contains lots and lots of bugfixes: all the major ones are gone, the
smaller ones are hidden better.  Hopefully there are no major new ones.

The Linux kernel can be found as source on most of the Linux ftp-sites
under the names

	linux-1.0.tar.gz		(full source)
	linux-1.0.patch.pl15.gz		(patch against linux-0.99pl15)
	linux-1.0.patch.alpha.gz	(patch from linux-pre-1.0)

it should be available at least at the sites

	ftp.funet.fi:
		pub/OS/Linux/PEOPLE/Linus	(now)
	sunsite.unc.ed:
		pub/Linux/Incoming		(now)
		pub/Linux/kernel		(soon)
	tsx-11.mit.edu:
		pub/linux/sources/system	(soon)
	ftp.cs.helsinki.fi:
		pub/Software/Linux/Kernel	(now)

This release finally moves Linux out of Beta status and is meant as a
base for distributions to build on.  It will neither change Linux'
status as FreeWare under the GPL, nor will it mean the end of
development on Linux.  In fact many new features where held back for
later releases so that 1.0 could become a well tested and hopefully
stable release.

The Linux kernel wouldn't be where it is today without the help of lots
of people: the kernel developers, the people who did user-level programs
making linux useful, and the brave and foolhardy people who risked their
harddisks and sanity to test it all out.  My thanks to you all.
(Editorial note: if you think this sounds too much like the Academy
Awards ceremony, just skip this: it's not getting any better.)

Thanks to people like Aaron Kushner, Danny ter Haar and the authors of
the AnwenderHandbuch (and others) who have helped me with hardware or
monetary donations (and to the Oxford Beer Trolls and others who took
care of the drinkware).  And thanks to Dirk, who helped me write this
announcement despite my lazyness ("hey, it's just another release, who
needs an announcement anyway?").

To make a long and boring story a bit shorter and boring, here is at
least a partial list of people who have been helping make Linux what it
is today.  Thanks to you all,

	Krishna Balasubramanian <balasub@cis.ohio-state.edu>
	Arindam Banerji <axb@cse.nd.edu>
	Peter Bauer <100136.3530@compuserve.com>
	Fred Baumgarten <dc6iq@insu1.etec.uni-karlsruhe.de>
	Donald Becker <becker@super.org>
	Stephen R. van den Berg <berg@pool.informatik.rwth-aachen.de>
	Hennus Bergman <hennus@sky.nl.mugnet.org>
	Ross Biro <bir7@leland.Stanford.Edu>
	Bill Bogstad <bogstad@cs.jhu.edu>
	John Boyd <boyd@cis.ohio-state.edu>
	Andries Brouwer <aeb@cwi.nl>
	Remy Card <Remy.Card@masi.ibp.fr>
	Ed Carp <ecarp@netcom.com>
	Raymond Chen <raymondc@microsoft.com>
	Alan Cox <iiitac@pyr.swan.ac.uk>
	Laurence Culhane <loz@holmes.demon.co.uk>
	Wayne Davison <davison@borland.com>
	Thomas Dunbar <tdunbar@vtaix.cc.vt.edu>
	Torsten Duwe <Torsten.Duwe@informatik.uni-erlangen.de>
	Drew Eckhardt <drew@cs.Colorado.EDU>
	Bjorn Ekwall <bj0rn@blox.se>
	Doug Evans <dje@cygnus.com>
	Rik Faith <faith@cs.unc.edu>
	Juergen Fischer <fischer@server.et-inf.fho-emden.de>
	Jeremy Fitzhardinge <jeremy@sw.oz.au>
	Ralf Flaxa <rfflaxa@immd4.informatik.uni-erlangen.de>
	Nigel Gamble <nigel%gamble.uucp@gate.net>
	Philip Gladstone <philipg@onsett.com>
	Bruno Haible <haible@ma2s2.mathematik.uni-karlsruhe.de>
	Andrew Haylett <ajh@gec-mrc.co.uk>
	Dirk Hohndel <hohndel@informatik.uni-wuerzburg.de>
	Nick Holloway <alfie@dcs.warwick.ac.uk>
	Ron Holt <ron@novell.com>
	Rob W. W. Hooft <hooft@EMBL-Heidelberg.DE>
	Michael K. Johnson <johnsonm@sunsite.unc.edu>
	Fred N. van Kempen <waltje@uwalt.nl.mugnet.org>
	Olaf Kirch <okir@monad.swb.de>
	Ian Kluft <ikluft@thunder.sbay.org>
	Rudolf Koenig <rfkoenig@immd4.informatik.uni-erlangen.de>
	Bas Laarhoven <bas@vimec.nl>
	Warner Losh <imp@boulder.parcplace.com>
	H.J. Lu <hjl@nynexst.com>
	Tuomas J. Lukka <Tuomas.Lukka@Helsinki.FI>
	Kai M"akisara <Kai.Makisara@vtt.fi>
	Pat Mackinlay <pat@it.com.au>
	John A. Martin <jmartin@csc.com>
	Bradley McLean <brad@bradpc.gaylord.com>
	Craig Metz <cmetz@tjhsst.edu>
	William (Bill) Metzenthen <billm@vaxc.cc.monash.edu.au>
	Rick Miller <rick@discus.mil.wi.us>
	Corey Minyard <minyard@wf-rch.cirr.com>
	Eberhard Moenkeberg <emoenke@gwdg.de>
	Ian A. Murdock <imurdock@shell.portal.com>
	Johan Myreen <jem@vipunen.hut.fi>
	Stefan Probst <snprobst@immd4.informatik.uni-erlangen.de>
	Daniel Quinlan <quinlan@bucknell.edu>
	Florian La Roche <rzsfl@rz.uni-sb.de>
	Robert Sanders <gt8134b@prism.gatech.edu>
	Peter De Schrijver <stud11@cc4.kuleuven.ac.be>
	Darren Senn <sinster@scintilla.santa-clara.ca.us>
	Chris Smith <csmith@convex.com>
	Drew Sullivan <drew@lethe.north.net>
	Tommy Thorn <Tommy.Thorn@daimi.aau.dk>
	Jon Tombs <jon@gtex02.us.es>
	Theodore Ts'o <tytso@mit.edu>
	Simmule Turner <simmy@digex.com>
	Stephen Tweedie <sct@dcs.ed.ac.uk>
	Thomas Uhl <uhl@sun1.rz.fh-heilbronn.de>
	Juergen Weigert <jnweiger@immd4.informatik.uni-erlangen.de>
	Matt Welsh <mdw@sunsite.unc.edu>
	Marco van Wieringen <mvw@mercury.mcs.nl.mugnet.org>
	Stephen D. Williams <sdw@lig.net>
	G\"unter Windau <gunter@mbfys.kun.nl>
	Lars Wirzenius <lars.wirzenius@helsinki.fi>
	Roger E. Wolff <wolff@dutecai.et.tudelft.nl>
	Frank Xia <qx@math.columbia.edu>
	Eric Youngdale <eric@tantalus.nrl.navy.mil>
	Orest Zborowski <orestz@microsoft.com>

A more detailed list with contact and description information can be
found in the CREDITS file that accompanies the kernel sources.
parent b8ff8ffb
CHANGES since 0.99 patchlevel 15:
- removed all the bugs, of course.
- networking fixes.
- more changes than I really wanted..
CHANGES since 0.99 patchlevel 14:
- too many to count, really. Besides, I've lost my notes.
CHANGES since 0.99 patchlevel 13:
- new kernel source layout: drivers separated
......
This diff is collapsed.
VERSION = pre-1
VERSION = 1
PATCHLEVEL = 0
ALPHA =
......
......@@ -2,11 +2,32 @@
Linux kernel release 1.0
These are the release notes for linux version 1.0. Read them carefully,
as they tell you what's new, explain how to install the kernel, and what
to do if something goes wrong.
as they tell you what this is all about, explain how to install the
kernel, and what to do if something goes wrong.
WHAT IS LINUX?
Linux is a Unix clone for 386/486-based PCs written from scratch by
Linus Torvalds with assistance from a loosely-knit team of hackers
across the Net. It aims towards POSIX compliance.
It has all the features you would expect in a modern fully-fledged
Unix, including true multitasking, virtual memory, shared libraries,
demand loading, shared copy-on-write executables, proper memory
management and TCP/IP networking.
It is distributed under the GNU General Public License - see the
accompanying COPYING file for more details.
INSTALLING the kernel:
- If you install the full sources, do a
cd /usr/src
tar xvf linux-1.0.tar
to get it all put in place.
- if you install by patching, you need a *clean* 0.99.15 source tree,
which presumably exists in /usr/src/linux. If so, to get the kernel
patched, just do a
......@@ -18,13 +39,6 @@ INSTALLING the kernel:
or xxx.orig), and make sure that there are no failed patches (xxx# or
xxx.rej).
- If you install the full sources, do a
cd /usr/src
tar xvf linux-1.0.tar
to get it all put in place.
- make sure your /usr/include/linux and /usr/include/asm directories
are just symlinks to the kernel sources:
......@@ -48,6 +62,9 @@ CONFIGURING the kernel:
/bin/sh (in that order), so hopefully one of those is correct.
NOTES on "make config":
- having unnecessary drivers will make the kernel bigger, and can
under some circumstances lead to problems: probing for a
nonexistent controller card may confuse your other controllers
- compiling the kernel with "-m486" for a number of 486-specific
will result in a kernel that still works on a 386: it may be
slightly larger and possibly slower by an insignificant amount,
......@@ -74,10 +91,10 @@ CONFIGURING the kernel:
COMPILING the kernel:
- make sure you have gcc-2.4.5 or newer available with g++. It seems
older gcc versions can have problems compiling linux 0.99.10 and
newer versions. If you upgrade, remember to get the new binutils
package too (for as/ld/nm and company)
- make sure you have gcc-2.4.5 or newer available. It seems older gcc
versions can have problems compiling newer versions of linux. If you
upgrade your compiler, remember to get the new binutils package too
(for as/ld/nm and company)
- do a "make zImage" to create a compressed kernel image. If you want
to make a bootdisk (without root filesystem or lilo), insert a floppy
......@@ -94,12 +111,13 @@ COMPILING the kernel:
For some, this is on a floppy disk, in which case you can "cp
/usr/src/linux/zImage /dev/fd0" to make a bootable floppy.
If you boot Linux from the hard drive, chances are you use LILO uses
the kernel image as specified in the file /etc/lilo/config. The
kernel image file is usually /vmlinux, or /Image, or /etc/Image. To
use the new kernel, copy the new image over the old one (save a
backup of the original!). Then, you MUST REINSTALL LILO!! If you
don't, you won't be able to boot the new kernel image.
If you boot Linux from the hard drive, chances are you use LILO which
uses the kernel image as specified in the file /etc/lilo/config. The
kernel image file is usually /vmlinuz, or /zImage, or /etc/zImage.
To use the new kernel, copy the new image over the old one (save a
backup of the original!). Then, you MUST RERUN LILO to update the
loading map!! If you don't, you won't be able to boot the new kernel
image.
Reinstalling LILO is usually a matter of running /etc/lilo/install.
You may wish to edit /etc/lilo/config to specify an entry for your
......
......@@ -462,7 +462,7 @@ static inline int check_modem_status(struct async_struct *info)
static inline void figure_RS_timer(void)
{
int timeout = 6000; /* 60 seconds; really big :-) */
int timeout = jiffies + 60*HZ; /* 60 seconds; really big :-) */
int i, mask;
if (!IRQ_active)
......@@ -473,7 +473,7 @@ static inline void figure_RS_timer(void)
if (IRQ_timer[i] < timeout)
timeout = IRQ_timer[i];
}
timer_table[RS_TIMER].expires = jiffies + timeout;
timer_table[RS_TIMER].expires = timeout;
timer_active |= 1 << RS_TIMER;
}
......
......@@ -243,9 +243,9 @@ static void sl_changedmtu(struct slip *sl)
DPRINTF((DBG_SLIP,"SLIP: mtu changed!\n"));
tb= (unsigned char *) kmalloc(l + 4, GFP_KERNEL);
rb= (unsigned char *) kmalloc(l + 4, GFP_KERNEL);
cb= (unsigned char *) kmalloc(l + 4, GFP_KERNEL);
tb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
rb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
cb= (unsigned char *) kmalloc(l + 4, GFP_ATOMIC);
if(tb==NULL || rb==NULL || cb==NULL)
{
......
......@@ -344,7 +344,7 @@ void isofs_read_inode(struct inode * inode)
if (!(bh=bread(inode->i_dev,block, bufsize))) {
printk("unable to read i-node block");
goto fail;
};
}
pnt = ((unsigned char *) bh->b_data
+ (inode->i_ino & (bufsize - 1)));
......@@ -353,18 +353,23 @@ void isofs_read_inode(struct inode * inode)
if ((inode->i_ino & (bufsize - 1)) + *pnt > bufsize){
cpnt = kmalloc(1 << ISOFS_BLOCK_BITS, GFP_KERNEL);
if (cpnt == NULL) {
printk(KERN_INFO "NoMem ISO inode %d\n",inode->i_ino);
brelse(bh);
goto fail;
}
memcpy(cpnt, bh->b_data, bufsize);
brelse(bh);
if (!(bh = bread(inode->i_dev,++block, bufsize))) {
kfree_s (cpnt, 1 << ISOFS_BLOCK_BITS);
kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS);
printk("unable to read i-node block");
goto fail;
};
}
memcpy((char *)cpnt + bufsize, bh->b_data, bufsize);
pnt = ((unsigned char *) cpnt
+ (inode->i_ino & (bufsize - 1)));
raw_inode = ((struct iso_directory_record *) pnt);
};
}
inode->i_mode = S_IRUGO; /* Everybody gets to read the file. */
inode->i_nlink = 1;
......@@ -383,7 +388,7 @@ void isofs_read_inode(struct inode * inode)
break;
if(i == raw_inode->name_len[0] || raw_inode->name[i] == ';')
inode->i_mode |= S_IXUGO; /* execute permission */
};
}
inode->i_uid = 0;
inode->i_gid = 0;
inode->i_size = isonum_733 (raw_inode->size);
......@@ -394,7 +399,7 @@ void isofs_read_inode(struct inode * inode)
inode->i_sb->u.isofs_sb.s_cruft == 'n') {
printk("Warning: defective cdrom. Enabling \"cruft\" mount option.\n");
inode->i_sb->u.isofs_sb.s_cruft = 'y';
};
}
/* Some dipshit decided to store some other bit of information in the high
byte of the file length. Catch this and holler. WARNING: this will make
......@@ -404,12 +409,12 @@ void isofs_read_inode(struct inode * inode)
inode->i_size & 0xff000000){
/* printk("Illegal format on cdrom. Pester manufacturer.\n"); */
inode->i_size &= 0x00ffffff;
};
}
if (raw_inode->interleave[0]) {
printk("Interleaved files not (yet) supported.\n");
inode->i_size = 0;
};
}
#ifdef DEBUG
/* I have no idea what extended attributes are used for, so
......@@ -458,8 +463,7 @@ void isofs_read_inode(struct inode * inode)
case 'm':
inode->u.isofs_i.i_file_format = ISOFS_FILE_TEXT_M; /* File type */
break;
};
}
/* Now test for possible Rock Ridge extensions which will override some of
these numbers in the inode structure. */
......@@ -472,11 +476,6 @@ void isofs_read_inode(struct inode * inode)
#endif
brelse(bh);
if (cpnt) {
kfree_s (cpnt, 1 << ISOFS_BLOCK_BITS);
cpnt = NULL;
};
inode->i_op = NULL;
if (inode->i_sb->u.isofs_sb.s_cruft != 'y' &&
isonum_723 (raw_inode->volume_sequence_number) != 1) {
......@@ -495,6 +494,10 @@ void isofs_read_inode(struct inode * inode)
else if (S_ISFIFO(inode->i_mode))
init_fifo(inode);
}
if (cpnt) {
kfree_s (cpnt, 1 << ISOFS_BLOCK_BITS);
cpnt = NULL;
}
return;
fail:
/* With a data error we return this information */
......
......@@ -276,6 +276,20 @@ static int rt_new(struct rtentry *r)
mask = ((struct sockaddr_in *) &r->rt_genmask)->sin_addr.s_addr;
gw = ((struct sockaddr_in *) &r->rt_gateway)->sin_addr.s_addr;
/* BSD emulation: Permits route add someroute gw one-of-my-addresses
to indicate which iface. Not as clean as the nice Linux dev technique
but people keep using it... */
if (!dev && (flags & RTF_GATEWAY)) {
struct device *dev2;
for (dev2 = dev_base ; dev2 != NULL ; dev2 = dev2->next) {
if ((dev2->flags & IFF_UP) && dev2->pa_addr == gw) {
flags &= ~RTF_GATEWAY;
dev = dev2;
break;
}
}
}
if (bad_mask(mask, daddr))
mask = 0;
......
......@@ -3552,7 +3552,9 @@ tcp_write_wakeup(struct sock *sk)
if (sk->zapped)
return; /* Afer a valid reset we can send no more */
if (sk -> state != TCP_ESTABLISHED && sk->state != TCP_CLOSE_WAIT) return;
if (sk -> state != TCP_ESTABLISHED && sk->state != TCP_CLOSE_WAIT &&
sk -> state != TCP_FIN_WAIT1 && sk->state != TCP_FIN_WAIT2)
return;
buff = sk->prot->wmalloc(sk,MAX_ACK_SIZE,1, GFP_ATOMIC);
if (buff == NULL) return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment