What have we lost? [video]
media.ccc.de
media.ccc.de
"Clear everything off of SharePoint you don't need, we're running out of room."
"The shared drive is full, we're going to purge everything not in one of the special directories. See the list."
AFS, as used at my university in the 00s, nicely reduced this problem by greatly expanding the amount of storage capacity available. It also helped speed up access to data by moving it to the system you were working on (assuming it was also an AFS node and not your personal device, in which case it was exactly like accessing a remote disk). It also helped with the "SharePoint is down again because even though we're a multibillion dollar corporation we're too cheap to hire real IT staff and Bob the Build Engineer tasked with keeping it up is on vacation." Local copies of data remained accessible.
In some ways it was self-fulfilling - corporate offices didn't use it, so there wasn't a great ecosystem, so corporate offices did not use it.
There were a handful of vendors, all with drawbacks. On a large network, AFS, or particular cells or filesystems could get into a weird state. It was not like Solaris NFS where most senior sysadmins understood the filesystem error states.
You want to feel you are putting data into something safe, permanent and always accessible, and AFS never felt like that in corporate environments I was in.
What about the 'PLATO system'?
"Long before Facebook's and Google's founders were born, and before Microsoft and Apple were founded. Before Xerox PARC. Before the Web. AOL. Bulletin boards and CompuServe. Before the Internet. Long before MOOCs (massively open online courses). Before pretty much everything we take for granted today, there was the PLATO system: home of not only computer-based education but, surprisingly, the first online community, and the original incubator for social computing: instant messaging, chat rooms, message forums, the world's first online newspaper, interactive fiction, emoticons, animations, virtual goods and virtual economies, a thriving developer community, MUDs (multi-user dungeons), personal publishing, screen savers. PLATO is where flat-panel gas plasma displays come from, and was one of the first systems with touch panels built-in to the screen. Countless other innovations." [1]
The book 'The Friendly Orange Glow' by Brian Dear details all about it. He says it's "a book in the works for more than two decades. Based on extensive research, including interviews with hundreds of key individuals who designed, built, managed, sold, and used the PLATO system."
[1] http://friendlyorangeglow.com/
PLATO on Wikipedia: https://en.wikipedia.org/wiki/PLATO_(computer_system)
Book on Amazon: https://www.amazon.com/Friendly-Orange-Glow-Untold-Cybercult...
I'm not sure how available/installable they are nowadays, but some of their ideas live on in L4 microkernels, apparently.
(enjoying the talk; thanks!)
Here a demo with a minesweeper clone i once made to discover Pharo: https://files.catbox.moe/jggff7.webm
It was really amazing but i didn't went further than that; Using Pharo quickly felt like being on a secluded island.
More about Pharo: https://pharo.org/features
It's a bit more than IPC, it's a discoverable object system.
Very far away from copying UI elements.
One practical downside is that the live editing / code & continue / source code-free operation (mentioned in the Interlisp-D segment of the video) could lead to needing "just the right image" with all the installed definitions you wanted. Sometimes "source code" might not even exist which could lead to coordination issues.
Had I had time, I would have patched the NFS code to run in "permissionless" mode, where it asks what creds are necessary to access a file, then just sends those creds. Hopefully somebody will be inspired to explore and blog about it though :-D
A model with unrestricted introspectability wouldn't have worked as a web-replacement anyway, it is not secure enough!
There are even servers like Servant for Haskell that make REST a first-class citizen of the server programming language. So we have the best of both worlds now: security and convenience.
How does the privilege separation work for that environment?
(mostly rhetorical questions)
As I understand it though, you don't have the concept of page faults at the image level; IIRC, Genera doesn't have any form of virtual memory, or if it does, it's all in microcode. Task switches are, iirc, handled in the image, but in the same way that it's done in Smalltalk: there's a function in the "kernel" to decide what task to switch to next, but the actual context switch is handled in microcode.
Also, there's no such thing as privilege separation; everything's running in a single address space and namespacing is handled using Common Lisp's package system.
The MIT Lisp Machine ran a simple kernel written in assembler that also included an interpreter for the user-visible instruction set, it would check periodically whether devices had raised an interrupt then return back into Lisp to handle the event.
Here are some features of IntelliJ that are reminiscent of a single-address-space fully reflective operating system:
• A multi-language scripting console that lets you access arbitrary parts of the IDE and give it interactive commands, either via its real API or (using reflection) anything else:
https://www.jetbrains.com/help/idea/ide-scripting-console.ht...
• An interactive debugger that can debug any app, including the IDE itself. Of course it can be risky to use breakpoints as you might suspend the debugger you're using and get stuck, but that's a conceptual issue, not a technical one.
• An interactive auto-completing command line like thing for commands, files, symbols, menu items etc. Double-shift opens it for me.
• Real-time CPU, memory and task monitors. Try opening the command palette, type CPU and then pick "CPU and memory live charts", or search for "activity monitor" and open it.
• A fully virtualized filesystem layer with sophisticated file explorer. You can explore 'into' files at the structural/symbolic level.
• Obviously it's the JVM so everything is fully garbage collected.
• A whole UI framework that supports both tiling and floating windows.
• The ability to load, unload and upgrade apps (plugins) on the fly without restarts. They can alter the behaviour of the environment and other plugins, either via real APIs or by the big hammer of loading a JVM agent on the fly. JVM agents can rewrite code in any arbitrary way and swap it into the app as it's running.
And you can program it with Lisp if you really want to, via Clojure. I watched the talk, it was a nice talk, but I couldn't help feeling that the answer to "What have we lost?" is actually - cynically - not much. Those environments had some interesting ideas and the good ones seem to have made it into production, just not via custom hardware and operating systems.
Edit: interesting how quick this hit -1. I think a lot of people like the idea of lost treasures in computing. I used to like it too. But I can't identify something these machines or operating systems do that is strictly superior to modern technology or large-scale 'operating environments' like IntelliJ.
Adding plugins without restarts in IDEA is a feature that's only a couple of months old now, and even then, making your own plugin is a very involved process. You can't just copy a single function into your own code, modify it, load it, and be done. In genera, that would take 1-5 minutes; quick enough that if something bothers you, you don't really need to think about whether it's worth taking the time to fix it. By the time you've done a cost/benefit analysis, you'd have been done with the fix.
I think as part of that you'd need to teach the debugger how to attach to itself without risk, probably by defining some notion of a protected system thread and then preventing breakpoints from affecting them. The JVM is certainly capable of doing this, although the debugger UI would have to be extended. I guess Genera either didn't have breakpoints or had some equivalent notion of un-breakable operations.
It's true that there's no way to just edit a single function and replace it, at least not out of the box. This is partly conceptual - Symbolics Lisp was pretty much a dynamically typed language if I remember correctly, as are most Lisps, and didn't have any real notion of version control or a compiler checking things for you ahead of time. You wouldn't want to edit only a single function in isolation if editing the internals of IntelliJ because a lot of the value of the tooling is putting the code in context via type checking, static analysis, folding and so on, which requires the rest of the code to be available and ideally visible.
Still, there's nothing missing from the core technology. To make things editable like that you could have a plugin that grabs the matching source zip for a selected symbol or bit of UI and opens it in a new project window, configured in such a way that compiling it causes it to be reloaded into the IDE. Either via the plugin reload mechanism or the bigger hammer of something like DCEVM, which lets you arbitrarily redefine classes at runtime even if their field layout changes. It's more of a workflow issue than anything else. The additional overhead is mostly buying you things you'd want anyway, like a notion of sharing and version control for your changes.
https://www.jetbrains.com/help/idea/debugging-javascript-in-...
It'd be easier to do it with the Chrome debugger though. I sometimes 'fix' websites that have annoying popups or similar with the dev tools.
With complex apps you have the problem that the owners don't want you modifying them, so they're minified and have other techniques applied that debuggers don't like. But that's not something a Lisp machine would have fixed. You can obfuscate any program.
Also, debuggers aren't the same thing as code editors so of course, you'll lose your changes when the page reloads. Making them persistent means throwing together a browser extension.
Chrome is not like IntelliJ though, because Chrome is a compiled C++ app. It's not written in JavaScript and it isn't a reflective environment like IntelliJ is. With IntelliJ you actually can do things like just open up an editor tab and invoke arbitrary internal functionality. With Chrome, not so much.
You can't easily do that with a C++ process indeed, which is why my example was about IntelliJ, not Chrome or any other C++ app. It's much easier to debug and change code on the fly when it's running on a VM like the JVM. I'm not arguing that something like Genera can be matched by any modern app, just that a few operating-system-like apps with similar properties do exist. We just don't think of them as operating systems because they pose as something else. Sort of like how emacs is a Symbolics Lisp-like environment posing as a text editor.
If you're going to argue that it's not the same unless it goes all the way down to the metal, well, people have built Java/JVM based operating systems before like JNode. It's technologically possible. Just not worth it. Being able to edit a function in the middle of your filesystem driver without reloading it is neat in theory but I wouldn't want to actually develop a filesystem that way.
You can't hide implementation from the User in such an environment; at least not to the degree you can with precompiled programs with debug symbols stripped. One requires you to infer function from raw assembly, the other, lets you step through areas of code that vendors want to keep out of the reach of user understanding.
90% of established security practices around code delivery are around keeping your product from being too easily reversed or "owned" by those who use it.
Thus the popularity of -as-a-Service business models. You can't invoice for something a user just uses.
The real problem is just mundane management / organization / interface / documentation that plain old enterprisey software fails on.
A lot of what is lost was handling a much smaller breadth of hardware, applications, and as you pointed out, a much simpler security exposure profile.
[1] https://groups.google.com/g/comp.lang.lisp/c/QzKZCbf-S6g/m/K...
[2] https://groups.google.com/g/comp.lang.lisp/c/XpvUwF2xKbk/m/o...
(The media.ccc.de server was a bit slow for me.)
I really wanted to like Forth (which is very similar to Lisp/Smalltalk systems, even possibly more elegant in some respects), because of the system extensibility, but the stack errors drove me crazy. So if the system had the ability to show the types of things on the stack (or name them) while programming, that would be a big help.
Such Forth seems to be surprisingly close to Haskell (or other lambda calculus like language), which I really enjoy lately (I wouldn't go back to Lisp), but written in reverse.
The simpler solution to this in many languages is type tagging. E.g. Ruby (MRI at least) uses a few bits to indicate type to avoid creating full-blown objects for small-ish integers, symbols, etc., and you'll find the same approach in many strongly typed dynamic languages.
It's also well trodden ground in the form of tagged unions of various forms going back at least to ALGOL 68 so there's plenty of literature on the subject.
Also look at another next generation concatentive language: https://8th-dev.com/ Not object-oriented per se but a very comprehensive protected hi-level language/environment with "Forthy" origins.
> I didn't know how to use it
Skateboard around thorough virtual file systems like "Plague" in the movie Hackers[1][2]
https://www.youtube.com/watch?v=OBfB2MJw3qg
If you only have 15 minutes, he gives another demo here:
https://www.youtube.com/watch?v=o4-YnLpLgtk
He has another video where he does some actual hacking (smooth scrolling of sheet music for display while playing an instrument):
The new C++ userspace drivers is called DriverKit, most likely in homage to NeXT Objective-C based DriverKit.
DisplayPoscript has evolved into PDF.
WebObjects has transitioned to a Java based framework, that is only used by Apple, and was the basis for J2EE design. Other than that even less people used NeXT for servers than workstations.
EOF evolved into CoreData.
If you want Renderman it is still available.
The UNIX underpinnins never really mattered, in a MIcrosoft kind of way, its main purpose was to bring UNIX software into NeXTSTEP and be a checkpoint on contracts.
So for me it is pretty much alive.
You could also take a look at IBM's redbooks. They're guides written by 3rd parties. http://redbooks.ibm.com/
And here are the IBM technical docs: https://www.ibm.com/docs/en
You can get used IBM Power servers on ebay, but they're pretty pricey. Not sure about licensing and such also, so you should look into that before buying.
[1] https://discord.gg/MzYzSvzN, or #ibmi on freenode [2] https://pub400.com/ [3] https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rza...
There are techs from 2 other companies in attendance. Apparently IBMi is used widely in banking.
It was the only thing NOT totaled when we got hit with ransomware, and is what holds our PII for our clients/workers.
Because it's actually more secure, or because it's so obscure that the malware didn't know what to do with it?
However, with IBM i comes PASE, which provides a AIX-like environment that can run most software built for AIX directly, and that's going to have the same sort of vulnerabilities as any other UNIX system. As far as I know, that's mostly used for new development, though, because developers don't like learning unfamiliar platforms.