From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,PLING_QUERY,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from minnie.tuhs.org (minnie.tuhs.org [45.79.103.53]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 511fbae9 for ; Tue, 15 Oct 2019 00:35:56 +0000 (UTC) Received: by minnie.tuhs.org (Postfix, from userid 112) id 429659BCD1; Tue, 15 Oct 2019 10:35:55 +1000 (AEST) Received: from minnie.tuhs.org (localhost [127.0.0.1]) by minnie.tuhs.org (Postfix) with ESMTP id 7581693D1F; Tue, 15 Oct 2019 10:35:47 +1000 (AEST) Received: by minnie.tuhs.org (Postfix, from userid 112) id 91FF893D1F; Tue, 15 Oct 2019 10:35:45 +1000 (AEST) X-Greylist: delayed 449 seconds by postgrey-1.36 at minnie.tuhs.org; Tue, 15 Oct 2019 10:35:45 AEST Received: from booboo.lectroid.com (booboo.lectroid.com [45.56.103.166]) by minnie.tuhs.org (Postfix) with ESMTPS id 3002093D06 for ; Tue, 15 Oct 2019 10:35:45 +1000 (AEST) Received: from booboo.lectroid.com (localhost [127.0.0.1]) by booboo.lectroid.com (8.15.2/8.15.2) with ESMTPS id x9F0SFoS016182 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Mon, 14 Oct 2019 20:28:15 -0400 Received: from localhost (pat@localhost) by booboo.lectroid.com (8.15.2/8.15.2/Submit) with ESMTP id x9F0SFPI016178 for ; Mon, 14 Oct 2019 20:28:15 -0400 X-Authentication-Warning: booboo.lectroid.com: pat owned process doing -bs Date: Mon, 14 Oct 2019 20:28:14 -0400 (EDT) From: Pat Barron X-X-Sender: pat@booboo.lectroid.com To: tuhs@minnie.tuhs.org Message-ID: User-Agent: Alpine 2.21 (LFD 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=US-ASCII Subject: Re: [TUHS] What was your "Aha, Unix!" moment? X-BeenThere: tuhs@minnie.tuhs.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: The Unix Heritage Society mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: tuhs-bounces@minnie.tuhs.org Sender: "TUHS" I don't know that I had a single "Aha!" moment, but there were a few things that just got hold of me and led me down the Unix path... The first Unix I used was V7m on a PDP-11/40, in college. By this point, I was "aware" of Unix, in theory I even knew C - but never had an actual system to try it out on until this point. I'd used other operating systems (or things that called themselves operating systems...), primarily TRSDOS, CP/M, OS1100, TOPS-10, TOPS-20, and VMS. Unix was certainly the first multiuser operating system that I ever had administrator access on. 1) The idea of taking the output of one program, and using it directly as input to another program - and the simplicity by which it was done - was revolutionary to me. It was not unusual for me at that time to do things like this by having the first program create a temporary file, and then having another program open this temporary file and use it as input, but the whole paradigm of stdin/stdout/pipes made it so you didn't even have to "know" in your program that you might need to use the output of some other program (via a temporary file) as input. That was amazing to me. 2) Unix was really the first operating system that I had full, buildable sources for. (I theoretically had access to VMS source code, but it was on microfiche and not in machine-readable form, so it was just a read-only reference.) If I wanted to see how the OS was doing something, I could look. If I wanted to change something the OS did, or add something to the OS (either in the kernel, or as a user space utility), I could do that (and I did on a couple of occasions). If something was broken, I could try to figure it out and fix it. There was this bug in V7m, where if you were on a non-separate I&D system that didn't have the floating point option (and our 11/40 did not), and you tried to run an "a.out" file that was zero length, you'd get a kernel panic. We were using the system for a computer architecture course, students were programming in assembly language, and if there was a problem with the source file the assembler would leave a zero length executable behind. Of course, students would try to run it anyway, even though "as" produced errors. We'd sometimes get 3 or 4 system crashes in the course of an evening. The students and the instructors were all up in arms because any time this would happen, everyone would lose whatever they were working on (and maybe more, if the filesystem got messed up during the panic), and if there was no one around who had a key to the computer room when it happened, it would stay down until they could find someone who had physical access and the knowledge to know how to deal with "fsck"... (The construction in the lab was pretty minimal, and the walls to most of the rooms didn't go all the way to the ceiling - sometimes when it crashed and no one was around, they'd take to climbing over the wall to reboot the system themselves - which could produce disasterous results of there were filesystem issues...) I found the problem, and I fixed it. That was my first adventure in kernel debugging... (Later, we migrated to a PDP-11/24 and we ordered the KEF11-A floating point option for it, so that problem became moot.) 3) The idea of processes being able to talk to each other (without some kind of pre-arrangement, like setting up a pipe between them, or using temporary files) was just amazing, and this was the first time I'd really seen it. I knew VMS had this thing called a "mailbox", but I never used it for anything and didn't even know what it was for. On V7m, I stumbled across the mpx(5) man page. I think the first time I came across it, I stared at it for hours, looking at the description and trying to figure out what you'd even use that functionality for. At some point it was like a lightning bolt hit me - "Oh, wait! You can use this to send messages between unrelated processes!" Except V7m came with one little proviso - the mpx code was there, but it didn't work... So I dug into it, and made it work - at least, well enough for what I wanted to use it for. I wrote a multiuser chat program with it (isn't that the first thing any undergrad does when they discover interprocess communications? :-) ). I had a similar epiphany with sockets on 4.2BSD a year or two later, under similar circumstances. The one thing I found in command with both mpx and sockets was that the documentation described the low-level functionality - but there was nothing that clearly stated, "This functionaliy is used to allow processes to talk to each other"... I'm sure there are plenty more experiences with early Unix that ensured that I'd continue down this path, but I think these are my favorites. --Pat.