Short list of differences between 2.0 and 2.1: - The ability to run Minix under DOS. - New and improved network task. More stable then the old inet, and allows for user-space serial IP (PPP). (No PPP supplied, hoping others will. Please disregard halfbaked manual pages on this subject.) - Console driver lines/columns is no longer fixed at 80x25. (See boot monitor's 'console' variable.) - Network configuration changed from behind the times RARP to modern DHCP, see boot(8). - Disk like devices (/dev/hd*, cd*, sd*) changed to generic controller names (/dev/c0d*, /dev/c1d*, etc.). Read controller(4) for the gory details. Example: /dev/c0d0p1s0 is now what used to be /dev/hd2a! (It may not seem like it, but this is a simplification.) - The 4 gigabyte disk limit has been replaced by a 2 terabyte limit. (IDE disks still limited to 128G though. Individual partitions also still limited to 4G.) - The Minix /bin/sh is replaced by the BSD shell (formerly /usr/bin/ash.) Makes life easier (always line editing), but is also more memory hungry, which is why we have: - A simple form of swapping that may make life on really old crates bearable. (Don't expect too much of it.) - The 'cc' driver now does separate I&D by default. You need 'cc -com' to get common I&D binaries. (Only the bootstraps really need this.) - In 16-bit mode, what used to be 'cc -m' is now the default. The new 'cc -m' behaviour is to change C code to K&R style before passing it to the C compiler to reduce memory use even further. - Support in MM for #! to name the interpreter in scripts. Random scripts are no longer seen as shell scripts, #!/bin/sh is required. Short list of changes in commands: - pc, m2: Pascal and Modula-2 compilers. - readclock -w: Write the current time into the CMOS clock. readclock -2: Add 20 years to compensate for a clock with a Y2K bug. - Several old, useless or minix-only commands removed. Short list of changes in manual pages: - New: pc(1), m2(1), env(1), uptime(1), xargs(1), crontab(1), dosd(4), ACK(7), cron(8), config(8), dosminix(8), serial-ip(8), slip(8). - Changed: cc(1), monitor(8). Long list of differences between 2.0 and 2.1: (Warning: This list is riddled with lame jokes and other silly things that happen to sneak in when doing something as boring as compiling this list.) 2.1/include/ansi.h Sets _POSIX_SOURCE if _MINIX is set. This means that just 'cc -D_MINIX' is enough to also add posix support. (Makes no sense without anyway.) 2.1/include/configfile.h New header file for the common configuration file format. 2.1/include/dirent.h Include by itself. This fixes the bug that required to be included before most things in C source files. Many other standard include files also do this, but I won't bore you by mentioning them here. 2.1/include/ibm/cmos.h 2.1/include/ibm/portio.h Definitions for the CMOS clock and IBM port I/O routines. 2.1/include/minix/com.h Appearance of the DOSDSK task. 2.1/include/ibm/int86.h Defines 'union reg86', a type used to carry register values for interrupt calls. Used by the BIOS and DOS drivers, and by the experimental user mode BIOS calls. 2.1/include/ibm/partition.h Unused older Minix partition type removed. 2.1/include/minix/boot.h Removed. MM and FS use a new system call to get boot parameters, a call that can also be used from user space (see svrctl and sysenv). 2.1/include/minix/callnr.h New svrctl system call, an ioctl like call for servers and tasks. Is used to implement small stuff for which a full blown system call is too much honour. 2.1/include/minix/com.h One task renamed (DL_ETH -> DP8390) and several changed from specific names (CDROM, SCSI, WINCHESTER) to a generic controller name (CTRLR(n)). The OPTIONAL_IO attribute is replaced by DEV_SCATTER and DEV_GATHER device codes to write to or read from an array of blocks. 2.1/include/minix/config.h Release and version number changed from 3 digits to just 2. With one release every so many years we don't need three levels. ROBUST setting removed, because it is the opposite of robustness. NR_CTRLRS added, specifying the number of controller tasks. ENABLE_NETWORKING removed. The inet server is no longer part of the kernel image. It is optionally started later as a program. ENABLE_ATAPI added for the ATAPI (CDROM) support in the AT/IDE driver. Cosmetic change of "ADAPTEC" in "AHA1540" in this and several other files. Added ENABLE_FATFILE and ENABLE_DOSFILE for two "file as disk" drivers. ENABLE_DP8390 is a new master switch for the network drivers based on the DP8390 chip. Code for specific cards can be turned on with ENABLE_WDETH, ENABLE_NE2000, and ENABLE_3C503. Atari and shadowing code removed. It's not used, so I can't maintain it working with respect to other changes. 2.1/include/minix/const.h Copyright changed to tell you that /usr/src/LICENSE contains the new BSD style license. "Do what you want with this, but don't mention us, and don't blame us for anything" is what us normal people think the lawyers are saying there. 2.1/include/minix/partition.h Partition base and size are now u64_t, a structure posing as a 64 bit number. 2.1/include/minix/swap.h Describes the header used on swap files/partitions. 2.1/include/minix/u64.h A buch of routines for 64 bit operations. There is no 'long long', so we have to make do with this. 2.1/include/net/ Complete overhaul for the new network task. 2.1/include/signal.h SIGCHLD signal (child terminated) added to the supported set. _NSIG raised from 16 to 17. 2.1/include/stdio.h Added snprintf() and vsnprintf() to help code to combat buffer overflows. 2.1/include/string.h Added strncasecmp() and strnlen(). 2.1/include/sys/ioctl.h Some new calls for the network task. New calls for user mode BIOS calls and manipulating LDT entries (memory mapping.) Mitsumi CD-ROM ioctls removed. 2.1/include/sys/svrctl.h New svrctl for odd system calls: Calls for a program to sign on as a server (inet), swapon/off, get boot parameter. 2.1/include/sys/types.h New u64_t type defined as a struct of two u32_t's. 2.1/src/LICENSE Removed: "Free for educational use" license. Added: "Free for any use" BSD style license. 2.1/src/Makefile You can now make 'world', 'libraries', 'all', and 'install'. Just type 'make' to see what each does. 2.1/src/boot/ Edparams command merged into boot.c, block caching removed to reduce complexity, simply "one command" functions don't need {}, 'memsize' and 'emssize' removed in favour of 'memory', new 'leader' and 'trailer' functions to print greeting messages. A20 enable/disable code in boothead.s has special code for PS/2 machines. Bootblock no longer fiddles with the floppy parameters. Really old crates that expect this no longer boot without a workaround. New systems that do not expect this now work. Sit in a HLT to save power while doing nothing. Use new BIOS calls to break the old 8G BIOS barrier. Limit now 2T. BOOT.COM and MKFILE.COM code ported from Minix-vmd. Extboot code replaced by more generic jumpboot bootstrap. Knowledge of controller style devices added, while remaining backwards compatible to I don't know when. 2.1/src/commands/aal/ Added 'u' flag to make aal more ar compatible. 2.1/src/commands/ash/ Ash no longer runs any old file as a script if it has executable bits. It leaves this to execve(), and execve only runs scripts that start with #!. Don't turn on -e or -x until .profile is done. 2.1/src/commands/cron/ New cron backported from Minix-vmd. Has per-user cronjobs and stuff. See cron(8) and crontab(1). 2.1/src/commands/dhcpd/ New DHCP client/server program. See dhcpd(8) and dhcp.conf(5). 2.1/src/commands/i386/asmconv/ GNU assembly parser added by R. Veldema, but still buggy. Fixes by Will Rose not yet incorporated. (I totally forgot about this until I saw it here while I compiled this list for 2.1.) 2.1/src/commands/i386/mtools-3.9.7/ New mtools command to operate on FAT file systems to replace the buggy dos{dir,read,write} on 386+ systems with enough memory. Type 'mtools' to see how it works. The manual pages were junk, so the're not added. With -? you can figure it all out. (I really should start a commands/big hierarchy.) 2.1/src/commands/i86/cc.c ASCII EM parser added to translation tables. "What's that?", you say? ACK translates from high level to an abstract machine, named EM, which in turn is translated to the target machine. The ability to compile ASCII EM code is nice for machine independent libary files written in EM assembly. Made 'cc -m -i' the default. Repaired the irrel pass (-m) to not choke on big functions, and made it able to turn a standard C file to K&R for the new -m flag. 2.1/src/commands/ibm/ Removed the Mitsumi stuff (cdplay, etc.). 2.1/src/commands/ibm/loadfont.c Changed to be able to load the appropriate font from a combined font file, a file that contains 8x8, 8x14, and 8x16 dot fonts. Font files in /usr/lib/fonts/ replaced by combined fonts. 2.1/src/commands/ibm/part.c Changed to know about controller devices and 64 bit disk offsets. Still user-hostile/expert-friendly. 2.1/src/commands/ibm/readclock.c Revamped to properly set the clock (Philip read a data sheet), and a Y2K kludge to add 20 years to a clock set 20 years back because it can't run in 2000. (Options -w and -2.) Reads a TZ boot variable that tells the timezone of the hardware clock. Use 'TZ=GMT0' and forget about summer and winter time changeovers. (Windows will go bonkers, of course, which is why my Windows systems use the timezone of Casablanca. Windows doesn't know what time it is no matter what timezone you use.) 2.1/src/commands/make/ An "include" command added to the syntax. Timing problem on fast machines fixed. 2.1/src/commands/reboot/ Log shutdown messages in /usr/adm/log instead of authlog. (Reduces the number of logfiles to one.) 2.1/src/commands/scripts/DESCRIBE.sh 2.1/src/commands/scripts/MAKEDEV.sh Code to describe/create new ethernet and controller devices added. 2.1/src/commands/scripts/cd.sh A script for all the commands builtin to the shell. Simply lets the shell do the work. Thanks to the new #! stuff in MM this can work. Does [, cd, command, echo, expr, false, getopts, read, test, true, umask, and wait. Does away with any C code for same. 2.1/src/commands/scripts/clear.sh Short for 'tget -str cl'. Replaces clr.c thanks to #!. 2.1/src/commands/sh/ Old Minix shell. Now installed as /usr/bin/msh. 2.1/src/commands/simple/at.c Still puts an at job in /usr/spool/at/, but alerts cron to this instead of letting the now dead atrun command run the job. 2.1/src/commands/simple/cleantmp.c New command to carefully clean out /tmp directories. 2.1/src/commands/simple/cp.c Uses a temp file for hard link administration so that it no longer blows up trying to keep track of too many hard links. 2.1/src/commands/simple/crc.c Use strerror() to print a meaningful error message instead of just "cannot open". Not a very spectacular change, but I wanted to pay attention to this, as many programmers still have lousy error reporting in their code. 2.1/src/commands/simple/date.c Added a bit of silliness in the form of a -S flag. It gives the time as "eternal september". September used to be the time that new, uneducated, college students learned about the net. With the start of Prodigy and AOL close to september 1993 some say that that month never ended. It's Sun Sep 2805 17:28:16 CEST 1993 when I write this. :-) 2.1/src/commands/simple/df.c Replaced by the Minix-vmd version that has many more options, including POSIX mandated 'df -P'. 2.1/src/commands/simple/ed.c Added 'ed -s' as a synonym for 'ed -'. Fixed a bug with character classes that went unnoticed for an amazing time. (Using two regular expressions went bad on the second.) 2.1/src/commands/simple/env.c New environment manipulation command. Not very useful, but POSIX mandates it. 2.1/src/commands/simple/fsck.c "Huge directory" warnings removed. Directories really can get big. Errors with overflows on filesystems with exactly 65535 inodes fixed. 2.1/src/commands/simple/getty.c Run a shell on the console if you can't execute login. 2.1/src/commands/simple/grep.c Grep fix to work properly as grep and also as egrep. I believe Michael Haardt gave me the patches. 2.1/src/commands/simple/hostaddr.c Changed to use data gathered by DHCP. 2.1/src/commands/simple/intr.c Used in /etc/rc to connect a program back to the console, because /etc/rc is now run completely disconnected to keep programs from having a process group and dying when /etc/rc is done. 2.1/src/commands/simple/irdpd.c Old "look for a router" daemon. Still available for odd cases, but replaced by DHCP normally. 2.1/src/commands/simple/isoread.c Fixed by Al Woodhull so that it now actually works. 2.1/src/commands/simple/kill.c You can now use 'kill -HUP' instead of 'kill -1'. See signal list in sigaction(2). 2.1/src/commands/simple/last.c Show time since boot if called as "uptime". 2.1/src/commands/simple/ls.c The -T option shows time to the second. -D (formerly -T) sorts by file type. This is a halfbaked ls, whole alfabet still far from fully used as option letters. 2.1/src/commands/simple/mkdir.c Allows you to write 'mkdir -m 755' too. The -m option used to only do symbolic modes, as if anyone can remember how. 2.1/src/commands/simple/mkswap.c New command to initialize swap partitions or files as such. 2.1/src/commands/simple/mount.c 2.1/src/commands/simple/umount.c Let mount and umount turn on/off swapping with -s. 2.1/src/commands/simple/nonamed.c Use the name daemons found by DHCP for information. Added a cache to make it useful for offline use. 2.1/src/commands/simple/printf.c New command that is works like the printf() library function. It's a new echo that doesn't suffer from BSD vs SystemV incompatibilities. (Under SystemV the behaviour of 'echo -e' is the default.) 2.1/src/commands/simple/rarpd.c Dumbed down to be a pure RARP daemon. It used to configure the network devices, but that is now dhcpd's job. 2.1/src/commands/simple/slip.c Implementation of the SLIP protocol, but no header compression. Merely an example of Pseudo IP network device programming. Real PPP programs can be obtained at the other side of the world. 2.1/src/commands/simple/stat.c New command that is the shell level equivalent of the stat(2) system call. 2.1/src/commands/simple/stty.c Taught about pixel sizes, mostly useful to guess the console font size. 2.1/src/commands/simple/sysenv.c New command to show the boot environment with the help of the svrctl(2) system call. Just type 'sysenv'. 2.1/src/commands/simple/tcpd.c Has a normal and a paranoid version. The latter is run if /etc/serv.access exists to enable network access restrictions. 2.1/src/commands/simple/xargs.c New xargs command obtained from BSD. 2.1/src/commands/urlget/ New command to get a file from a Web or FTP site. 2.1/src/etc/inet.conf New configuration file for inet. 2.1/src/etc/profile Timezone now by default GMT instead of CET. (I happen to be in The Netherlands, i.e. the CET timezone. You shouldn't be bothered by that fact.) 2.1/src/etc/rc Large changes in system startup. /etc/rc now knows a single user mode (boot -s) and calls /usr/etc/rc to do the hard work. (Inspired by Minix-vmd.) 2.1/src/fs/cache.c XXX 2.1/src/fs/device.c Nonblocking I/O to the network task fixed. If the network task blocks a request then cancel it if nonblocking. 2.1/src/fs/open.c Pipe administration moved to two different zone number slots in the in-core inode. Leave last zone number free. (Used at the VU for an "implement access control lists" assignment.) 2.1/src/fs/table.c Dosdisk table entry added. 2.1/src/inet/ Replaced by a much newer version. Stable, two ethernets and two pseudo IP networks for serial IP for instance. 2.1/src/kernel/3c503.[ch] Code and definitions for the 3C503 network adapter by G. Falzoni 2.0.0/src/kernel/aha1540.c The file aha_scsi.c is renamed to aha1540.c to better reflect the type of card. Useful if someone with lots of time writes a 2940 driver. 2.1/src/kernel/*_wini.c Task number no longer hard coded. It is now possible to say 'sd=at' and 'hd=a1540' to confuse the hell out of everything. Needless to say you shouldn't do that. 2.1/src/kernel/bios_wini.c Old bios13 calls removed in favour of the newer, more generic, int86 call. (Drivers can now make any BIOS call they can think of.) 2.1/src/kernel/clock.c Old timer value returned by alarm(2) rounded up to the nearest second. Alarm should never return 0 if the timer is still running. 2.1/src/kernel/console.c Screen dimensions (rows/columns) now variable and obtained from the BIOS tables. This makes it possible to run the console in 132x43 if the video card permits. Reverse video bug fixed. Report screen pixel sizes in termios struct. 2.1/src/kernel/const.h IRQ vectors renumbered to 0x50 (more or less free) and 0x70 (same as BIOS). This does not upset DOS. 2.1/src/kernel/dosfat.c 2.1/src/kernel/dosfile.c New drivers to see a big DOS file as a Minix disk, either using direct interpretation of FAT filesystem structures, or by using DOS file I/O. 2.1/src/kernel/driver.c Changes to allow one task to make I/O calls to another task, like dosdisk to at_wini. 2.1/src/kernel/keymaps/italian.src Replaced by keymap supplied by Ernesto Del Prete . 2.1/src/kernel/klib386.s 2.1/src/kernel/klib88.s BIOS disk I/O function bios13 replaced by more generic int86 interrupt call. A20 enable/disable code in klib88 has special code for PS/2 machines. 2.1/src/kernel/main.c Kernel, MM, FS, etc. information now comes from an array of a.out headers supplied by the boot monitor. Available memory comes from the new 'memory' boot variable. This allows Minix to start in an arbitrary location in memory, for instance in the memory that DOS offers as "free". 2.1/src/kernel/memory.c "RAM disk is too big" message changed into "Not enough memory for RAM disk". Let's see how much confusion that causes instead. 2.1/src/kernel/misc.c Get free memory list from the 'memory' boot variable. 2.1/src/kernel/mpx386.s 2.1/src/kernel/mpx88.s Sizes array removed, aout array introduced. 2.1/src/kernel/protect.c Small interrupt vector / segment descriptor initialization changes. 2.1/src/kernel/start.c Changes to allow for the variable placement of the kernel in memory. 2.1/src/kernel/table.c Changes in the driver choice code, i.e. 'hd=bios'. Mapdrivers() function added to make those choices. 2.1/src/kernel/type.h Interface declarations for the int86 routine using a big fat union to be able to access 8086/386 registers in many different ways, i.e. reg86.b.al, reg86.w.al, reg86.l.eax. 2.1/src/lib/ansi/malloc.c Malloc changed so that it no longer sets errno to ENOMEM if it succeeds. Should be no problem, except that a common bug in the use of perror() causes "Not enough core" errors to appear instead of the proper error message. 2.1/src/lib/ansi/misc.c Fixed list of (outdated) time zone information removed. One should use a proper TZ definition. 2.1/src/lib/i386/rts/crtso.s 2.1/src/lib/i86/rts/ncrtso.s The variable '_penviron' is initialized to point to either 'environ' or a hidden variable '_penvp'. *_penviron is then used throughout the library as the environment pointer. Applications can now use (and change) 'environ' as the environment pointer, or stupidly use 'environ' for other things without ill effect. 2.1/src/lib/i386/rts/m2rtso.s 2.1/src/lib/i386/rts/prtso.s 2.1/src/lib/i86/rts/nm2rtso.s 2.1/src/lib/i86/rts/nprtso.s New Pascal and Modula-2 runtime startoffs. 2.1/src/lib/ip/ Several new and updated network libary routines. 2.1/src/lib/libm2 2.1/src/lib/libp New Pascal and Modula-2 library. 2.1/src/lib/rts New machine independent runtime system stuff, currently containing only setjmp.e moved here from the i386 directory. An old i86/setjmp.s has been removed. Hopefully this code will end the spurious "longj err" seen on some old XTs. Make sure you're seated properly before attempting to read setjmp.e. 2.1/src/mm/main.c Changes in the memory summary code to accomodate the no longer fixed position of the Minix kernel in memory and the memory list. 2.1/src/tools/ps.c Changed to allow 'ps -ef' to do the same as 'ps alx'. (System V vs. BSD syntax.) Kees J. Bot