.ls 1 .ap C "Distributed Revisions of the Notesfile System" Several revisions of the Notesfile System are available. This appendix attempts to describe the differences between each revision and the previous one. .a1 "Previous Revisions" The Notesfile System was first distributed in June 1982. Since then it has gone through a number of internal revisions and several major revisions. The initial 1.0 revision had numerous bugs in the code and inadequacies for interfacing with the news system. Release 1.3 (the most recently ``announced'' release) became available in March 1983. Revisions are maintained with the RCS system. Major releases are number 1.1, 1.2, 1.3 ... 1.x. Internal modifications are numbered off of the base revision. Internal revisions between 1.2 and 1.3 are of the form 1.2.1.x. All files in a distribution will have the same major revision number; files modified since the major release will an internal revision number based off the major revision number. .a1 "Revision 1.5" Revision 1.5 is an intermediate revision. Revision 1.4 was stillborn. It's primary purpose was to integrate a number of useful modifications sent in by notesfile users. A number of recent 1.5+ distributions have almost the same functional differences from previous revisions as the newer revision 1.6 code. .a1 "Revision 1.6" Revisions 1.6 of the Notesfile system includes a number of changes. Numerous bugs in the code were repaired. Several functional differences are also evident in this revision of the code. Major changes are listed below in chronological order. To see what has changed since you received your copy of the code, find the first date after you received your distribution and read from there. Fall 1983: .bx .ix Archival techniques are more refined. Previous revisions determined the age at which to expire notesfiles from the nfarchive command line. Each notesfile now contains its own `expiration threshold'. This threshold can be set to an arbitrary time (3 days), default to the value specified on the nfarchive command line, or specify never to archive the notesfile. These options allow expiration of the entire ``net.*'' collection of notesfiles with the single command line `nfarchive net.*'. Shorter duration notesfiles (maybe net.jokes) can be explicitly set to a few days; notesfiles like net.bugs can be set to `never'. The remaining notesfiles might be set to `default'. A program `expirechange' is provided in the utility subdirectory of the distribution to initialize the expiration threshold of existing notesfiles. This is recommended because the previously unused field may contain garbage values. .ix A simple program `namechange' is included in the utility directory to change the name within the data base. If you pick up copies of the data base and set them down on other systems this program will change the name of the system the data base thinks it is on for you. .ix Alignment within the notesfile descriptor structure caused me to remove 6 bytes of filler when adding a `long' to the structure. The size of the structure must be constant. The program in utility/structsizes.c prints the sizes of each of the possibly affected structures. It would be prudent to compile and execute this program once with the old structure definitions and once with the new definitions to ensure that the structures are the same size. Someday a notesfile dump/load program will be written that makes this worry disappear. .ix Mapping notes out to the news system is more sophisticated. The new scheme allows a notesfile to send base notes to one newsgroup and responses to another newsgroup. This is solely for the net.general/net.followup pair. See the section ``Copying Notesfiles to News'' for a more detailed explanation of this feature. .ix Binaries are portable. With Unix kernels supporting the ``uname'' or ``gethostname'' system call the code determines the host at runtime. The code now also looks for the notesfile owner in /etc/passwd to dynamically determine the `notesuid'. As an example, a local network of Vaxen all running 4.1a Bsd can run the same binary even if the `notes' user id varies between machines. Eventually it would be nice to have a single binary handle all 4.1a Vaxen, another for all 4.2 Vaxen, a third be adequate for all USG 5.0 3b-20's. (This does not mean that distributions will be binary only but rather that a local administrator will be able to compile once and ship copies of the binaries around with a simple shell script). .ix The ``rinstall'' shell script updates the notesfile binaries on a remote system. It assumes that the local binaries will work on the remote machine (don't rinstall from a Vax to a PDP-11). The script uses the 4.1a `rcp' and `rsh' facilities to perform the FTP and set modes on the remote files. .ex December 1983: .bx .ix Notesfiles can be specified as absolute pathnames. Commands such as ``notes /some/place/mynotes'' are now legal. An anticipated modification will allow search rules for notesfiles similar to those command search rules used by many shells. .ix Archives are stored as notesfiles. Now that a notesfile can be specified by an absolute pathname, archives are stored in notesfile format. Access to archives can be either by explicit reference or through the new ``N'' command which automatically nests to the archive of the current notesfile. .ix Nfarchive now understands about ``working sets''. The working set is the minimum number of notes left in the active notesfile after an archive run. .ix Archive destinations are mapped. A file in the notes utility directory (.utilities/net.aliases/Archive-into) maps from active notesfiles to their respective archives. This file contains absolute pathnames. (/usr/spool/notes/somenotes instead of somenotes). .ix The beginnings of permission modes for an archive are there. Currently only directors are allowed to write in an archive notesfile. Some more work on copying permission lists and other information particular to the notesfile must be done. .ix The director page now contains information about the number of ``holes'' (deleted notes and responses) in a notesfile. This is useful for determining the need to compress a notesfile. .ex January 1984: .bx .ix Each notesfile can now override the nfarchive command line options for archiving/deleting expired notes and for expiring notes on the basis of the director message status. The director options page offers options to modify these fields. The ``default'' value specifies using the value supplied on the nfarchive command line. .ix The director option page has been rearranged. More information is displayed, more options are processed. Many of the changes are cosmetic and oriented towards helping the user figure out what is happening. .ix The 4.2 Bsd release of Unix now has its own kernel definition. Some of the new features of 4.2 Bsd are thus included. This includes longer filenames and (faster) advisory locking. .ix 4.2 Bsd (and 4.1a) allow processes to belong to multiple groups. The notesfile code now uses all of these groups to determine access rights. For example, a user belongs to groups ``alpha'', ``beta'' and ``gamma''. Group ``alpha'' has read permission, group ``beta'' has write permission, and group ``gamma'' has no specific permissions (it's covered in the ``Other'' clause). The user is given the inclusive OR of his permissions: in this case he is given read/write privileges. The default ``Other'' group is used only when none of the user's groups are explicitly named in the permission list. Explicit permissions for users still takes precedence over group permissions. .ex February 1984: .bx .ix The networking software and the statistics printing package now keep track of how many orphans are adopted by their true parent. This lets us determine how many base notes are actually lost and how many show up behind their children. .ix The nfaccess program allows simple and quick editing of access lists for a number of notesfiles. Nfaccess functions similarly to chmod(1), you supply an access right and a list of notesfiles to apply it to. The new access right is placed in the access list of each notesfile specified. In the event of an existing access right, the new right replaces the old one. .ix The code now understands about the extra work it must to to function properly under the 4.2 Bsd signal semantics. .ix Nfabort provides user programs with a means of leaving core dumps in specified places and logging the fact with an arbitrary message in a notesfile. The notesfile code itself uses this routine when trapping internal errors. .ix Finally added the `l', `L' and `z' commands from Lou Salkind and Rick Spickelmier. The `l'-`L' pair mimic the `j'-`J' pair with the exception that when no unread notes are left, the l/L commands leave the notesfile. Thus `l' is almost a `jq' command. .ix The ! notesfile exclusion feature first implemented by Salkind and Spickelmier is now in this revision. Constructs like: .br notes ``net.*'' !net.general .br are possible. This example specifies all ``net.'' notesfiles except net.general. .ix Alternate sequencers are now available. An alternate sequencer allows users sharing the same signon to maintain separate sequencer files. .ex March 1984: .bx .ix Revision 1.6.2 created. Needed some distinction since 1.6 was getting rather long lived and we weren't ready to call it 1.7 yet. .ix Each notesfile now enforces its own limit on the size of single notes and responses. This is initialized to a default value when the notesfile is created and can be changed from the director options page. Articles longer than the permitted maximum are truncated and have a message appended detailing how many bytes were ignored and the name of the site where it occurred. .ix Customized access lists are generated when each notesfile is created. The file `/usr/spool/notes/.utilities/access-template', if it exists, is used to modify the default access list when a notesfile is created. This file contains ASCII specifications of access rights in the same form as used on the nfaccess command line. Lines in this file beginning with `#' are considered comments. .ix Author searching now understands about substrings. You no longer have to match exactly an author. Thus an author search would find articles written by a user ``mark'' on any machine, a user ``hallmark'' on any machine, and any user on the ``market'' machine. .ix The notes/news interface has been rewritten. The news->notes code now understands all of the USENET standards for B-news 2.10. Newsinput understands about the References line. The notes->news code generates articles acceptable to the rest of USENET. .ex December 1984: .bx .ix The nfmail program has been re-written to understand about how to link responses into a notesfile. This means nfmail is now a viable way to have your incoming mail handled. After a little more work is done, it will handle outgoing mail via the ``p'' command equaly well. .ix Notes now runs set-gid. This solves some privilege problems with set-uid programs such as signal delivery. It also makes it easier for users to kill their jobs. Thanks go to Lou Salkind for pointing this out long ago; I just took a long time to realize it. .ex .a1 "Revision 1.7" The long ago promised revision 1.7 of the notesfile code is finally a reality. This version incorporates many of the features promised, and a few that weren't. I thought about merely changing things from revision 1.6.2 to 1.6.3, but there was a change in the database format and I decided a more drastic change in name was called for to match the database format change. To upgrade to revision 1.7 from a previous revision (even the last 1.6.2 revisions) requires a dump/load sequence with the ``nfdump'' and ``nfload'' programs. The man pages for these programs give more information on how to carry out this procedure. In addition to changing the format of the notesfile database, you must convert the format of the sequencer files. To do this, look at the programs ``seqtoascii'' and ``seqtobinary'' in the ``utility/seq-cvt'' directory of the notesfile distribution. Appendix A also contains information on how to convert the sequencer files and database. These changes took place during December of 1984 and include the following differences from the 1.6.2 revision of the notesfile code. .bx .ix The author structure for a note/response now contains the home system name. This provides the ability for gateway machines to assign message-id's as needed without worrying about corrupting the author's home system. It also comes in handy within the context of the nfmail program: nfmail can now report a true author for letters and still assign a unique identifier based on the local system. .ix Timestamps for articles are now stored in the standard UNIX format: seconds since 00:00 GMT, January 1, 1970. The code recognizes (and stores) both formats and will present either format as needed. .ix Notes now supports full domain based addressing. The nfxmit program expects a full doman address (e.g., ``uiucdcs.uiuc.arpa''), unique id and system information is generated with full domain information, and the notesfile/news gateway now generates complete domain addressing information. .ft B These changes require some care in upgrading from previous releases of the notesfile system. .ft P .ex .a1 "On the Blackboard" The primary motivation for more work on the code is to eliminate known bugs. Integrating other's modifications into my code has taken a lower priority. Sometime down the road, I hope to gather up all the lessons learned from this first version and design a second implementation. Issues to be considered in the second implementation include: shared notesfile data bases between several hosts, different user-interfaces (notes-like, readnews-like), notesfile servers, and interfacing with extant systems.