1. 4

  2. 2

    I have discovered this document for the first time and I found it a fantastic read (roughly 1 hour) and it triggered at least for me the following remarks and questions:

    • It seems that in 1974 User Groups did not yet exist: I take it from the following quote “Also given for new files is a set of seven protection bits. Six of these specify independently read, write, and execute permission for the owner of the file and for all other users.” If that’s the case, it would be interesting to know at what time was the concept of user groups introduced and what were the use cases that pushed for this?

    • It is said that the set-user-ID seems to solve the MOO accounting problem: Does anybody know what this accounting problem was about?

    • Is it possible that quota was not yet introduced? I take this from the following quote: “The simplest reasonably fair algorithm seems to be to spread the charges equally among users who have links to a file. The current version of UNIX avoids the issue by not charging any fees at all.” Questions that this raises: When was quota introduced? Is the quota functionality standardized among modern UNIXes? If so what are the limits and inconsistencies of standardized quotas?

    • The error stream stderr seems to not have been invented yet in 1974. I take this from the quote “Programs executed by the Shell, however, start off with two open files which have file descriptors 0 and 1.”

    • Evolution through Hackability, Expressiveness and Source Code Availability: Authors emphasize the importance of hackability, expressiveness and availability of source code, for the evolution, or as they call it “maintainance”, of the system. Hackability quote: “First, since we are programmers, we naturally designed the system to make it easy to write, test, and run programs.” Expressiveness quotes: “Given the partiality antagonistic desires for reasonable efficiency and expressive power, the size constraint has encouraged not only economy but a certain elegance of design.” “Another important aspect of programming convenience is that there are no “control blocks” with a complicated structure partially maintained by and depended on by the file system or other system calls.” Quotes about availability of source code: “Since all source programs were always available and easily modified online, we were willing to revise and rewrite the system and its software when new ideas were invented, discovered, or suggested by others.”

    • Stability/reliability: Quote: “The longest uninterrupted up time was about two weeks. Service calls average one every three weeks, but are heavily clustered. Total up time has been about 98 percent of our 24-hour, 365-day schedule.”

    • Is there any document that describes in such a concise way what principal changes have been introduced in Plan9?

    1. 3

      It is said that the set-user-ID seems to solve the MOO accounting problem: Does anybody know what this accounting problem was about?

      MOO was a simple number guessing game. What made it interesting in its original computer implementation was that it maintained a high-score table. When a user guessed right, the high score table had to be modified.

      The problem was that the high score table was a file not owned by the user. For everyone to be able to update it, it had to be writable by everyone, which made cheating trivial.

      Setuid allowed the file to be owned by the “MOO user” and writable only by that user, but the command to update it could be run by anyone.

      Basically it was the same mechanism that passwd uses to update user passwords, and that various multi-user games have used on UNIX since time immemorial.

      I remember reading about the MOO example specifically in some “hardening UNIX” book/article at some point. I can’t remember exactly where, sorry.