The Xerox Alto, Smalltalk, and rewriting a running GUI (2017)

75 rbanffy 23 6/9/2025, 9:25:44 PM righto.com ↗

Comments (23)

dang · 3h ago
This post was part of a project that happened in 2017, the year that Alan Kay donated a Xerox Alto to YC. That was amazing but also challenging: what do you do with such a treasure? You can't just let it sit around.

After sweating a bit, we found a perfect answer and I think it's still valid today. What you do with something as precious as an original Xerox Alto, is you find someone as good as kens to entrust it to.

Here's me describing the effort at the time: https://news.ycombinator.com/item?id=11930198.

Ken ended up pulling in a brilliant bunch of volunteers (loosely grouped around the Computer History Museum, IIRC), and they eventually got the Alto working. Not only that but they made an incredible series of videos and posts along the way, so the rest of us could follow along.

Once they'd gotten it working, we had a new challenge: what do you do with a working Alto? Again, the answer didn't take too long to figure out. What you do in such a case is you give it to the people who actually knew (and cared) enough to successfully resuscitate it.

dang · 3h ago
Here are the threads I found from back then—if anyone finds others, let me know!

Fixing the Ethernet Board from a Vintage Xerox Alto - https://news.ycombinator.com/item?id=15636863 - Nov 2017 (29 comments)

The Xerox Alto, Smalltalk, and Rewriting a Running GUI - https://news.ycombinator.com/item?id=15527726 - Oct 2017 (56 comments)

Inside the vintage Xerox Alto's display, a tiny lightbulb keeps it working - https://news.ycombinator.com/item?id=15472747 - Oct 2017 (50 comments)

Bitcoin mining on a vintage Xerox Alto: very slow at 1.5 hashes/second - https://news.ycombinator.com/item?id=14683326 - July 2017 (41 comments)

Improvements to the Xerox Alto Mandelbrot drop runtime from 1 hour to 9 minutes - https://news.ycombinator.com/item?id=14637763 - June 2017 (63 comments)

One-Hour Mandelbrot: Creating a Fractal on the Vintage Xerox Alto - https://news.ycombinator.com/item?id=14587915 - June 2017 (53 comments)

Xerox Alto Restoration – Ethernet pioneers/founders of 3Com visit [video] - https://news.ycombinator.com/item?id=13138977 - Dec 2016 (35 comments)

Restoring YC's Xerox Alto day 10: New boards, running programs, mouse problems - https://news.ycombinator.com/item?id=12714358 - Oct 2016 (13 comments)

Restoring YC's Xerox Alto day 9: tracing a crash through software and hardware - https://news.ycombinator.com/item?id=12685593 - Oct 2016 (27 comments)

Restoring YC's Xerox Alto day 8: it boots - https://news.ycombinator.com/item?id=12583554 - Sept 2016 (95 comments)

Restoring YC's Xerox Alto day 7: experiments with disk and Ethernet emulators - https://news.ycombinator.com/item?id=12557777 - Sept 2016 (14 comments)

YC's Xerox Alto restoration Part 7: disk exerciser trial [video] - https://news.ycombinator.com/item?id=12520795 - Sept 2016 (8 comments)

Restoring YC's Xerox Alto: how our boot disk was trashed with random data - https://news.ycombinator.com/item?id=12507361 - Sept 2016 (50 comments)

Restoring YC's Xerox Alto, Day 6: Fixed a chip, data read from disk - https://news.ycombinator.com/item?id=12482209 - Sept 2016 (31 comments)

Xerox Alto restoration day 5: Smoke and parity errors - https://news.ycombinator.com/item?id=12437018 - Sept 2016 (1 comment)

Xerox Alto Restoration Part 5 [video] - https://news.ycombinator.com/item?id=12427341 - Sept 2016 (13 comments)

Restoring Y Combinator's Xerox Alto, day 4: What's running on the system - https://news.ycombinator.com/item?id=12197591 - July 2016 (35 comments)

Restoring Y Combinator's Xerox Alto, day 3: Inside the disk drive - https://news.ycombinator.com/item?id=12072827 - July 2016 (21 comments)

Xerox Alto Restoration Part 3: drive ok and First boot attempt [video] - https://news.ycombinator.com/item?id=12035108 - July 2016 (20 comments)

Restoring Y Combinator's Xerox Alto, day 2: Repairing the display - https://news.ycombinator.com/item?id=12017354 - July 2016 (38 comments)

“Hello world” in the BCPL language on the Xerox Alto simulator - https://news.ycombinator.com/item?id=11987324 - June 2016 (59 comments)

Xerox Alto Restoration Part 2: Firing up the monitor [video] - https://news.ycombinator.com/item?id=11977215 - June 2016 (24 comments)

Restoring YC's Xerox Alto, day 1: Power supplies and disk interface - https://news.ycombinator.com/item?id=11954920 - June 2016 (23 comments)

Y Combinator's Xerox Alto: restoring the legendary 1970s GUI computer - https://news.ycombinator.com/item?id=11929396 - June 2016 (105 comments)

yakz · 8h ago
In person, on the real screen, is the font easier to read? I don’t understand why they didn’t go with something more… “plain”?
sumim · 7h ago
This font is called "Cream" and was designed and created by Bob Flegal to look identical on both screens and laser printers.

cf. https://squeak-dev.squeakfoundation.narkive.com/Rs0CrNOk/fon...

kens · 7h ago
Well, the CRT on our Alto is pretty old, so the text is a lot worse in person. (That's why I used screenshots instead of photos.) But I think that even with a good monitor, the Smalltalk font would be quirky at best.
neilv · 8h ago
I don't know, but I've wondered whether they were trying to signal or encourage (in demos or usage), that this was different, than familiar business computers.
TheOtherHobbes · 6h ago
It was the late 70s/early 80s, so a certain amount of twee whimsy was obligatory.
packetlost · 7h ago
I imagine it would look a lot nicer on a CRT vs rendered in high resolution on a LED display.
ofalkaed · 5h ago
What is the best path for getting into Smalltalk these days? It seems like a good option for personal projects but never found much in the way of resources or even a good run down on Pharoh vs Squeak.

No comments yet

tho23i4324324 · 7h ago
I'm generally shocked that people aren't profoundly shocked and saddened by what has been lost with these kind of "modifiable while running" systems like Xerox Alto and the Lisp Machines.

Modern software frameworks are so shockingly bad and uninteractive that we now have to rely another layer of bullshit with LLMs just to get us to be half as productive as these envs. : (

(okay okay REPL-based things are getting better, but still nowhere close to what Lisp even w/ Emacs can do.)

TheOtherHobbes · 6h ago
That model stops working as soon as you try to distribute software at scale. You need some kind of standardisation and baseline. Otherwise your customisations conflict with someone else's customisations, with consequences that vary from mildly annoying to catastrophic. And the whole idea of shared software collapses.

It would work if you had strict access control to each feature in a common code base. But Git hadn't been invented yet.

The other issue is performance. Compiled ST isn't particularly slow, but you lose the modifiability. Interpreted ST has a mixed profile - some features are slow, some are fast - but generally it was slow compared to C.

Today that doesn't matter so much, but it was a drawback at the time.

It's a seductive model and I totally get the appeal. But it's not quite as straightforwardly superior as it might appear to be.

kens · 4h ago
As far as performance, the Alto team described the performance of Smalltalk as between "majestic" and "glacial". From my experience with the Alto, Smalltalk seemed unusably slow, and I'm amazed that they could actually accomplish anything with it.
speedbird · 3h ago
With the ParcPlace flavour teamwork with Envy version control was pretty slick. And in performance it was mostly compiled to bytecode with some cunning tricks in place to make interactive debugging appear to work at the source level. Truly great environment for exploratory development: concrete example, while building a comms server I could inspect why message handling failed, patch code, rerun from failure, much faster cycle time than most other langs/envs.
mkfs · 3h ago
> But Git hadn't been invented yet.

Git isn't the first or oldest DVCS. Smalltalk actually had multiple DVCSs, including ENVY (VA/Cincom), which dates back to the mid 90s, and Monticello (Squeak/Pharo), which dates to the early 2000s--both of which predating git.

wonger_ · 5h ago
Does Erlang have these same properties? From what I hear, it works great for distributed systems and modifying-while-running.
toast0 · 2h ago
Erlang systems don't do so well when multiple people are working on them with different understanding of what production is. (And especially if nobody actually knows).

I don't know that you need 'strict access control' as proposed, but you do need coordination, and a source code repository is a way to manage coordination.

Erlang doesn't have a different mode for fixed vs loadable code, although you may need to write code differently in order to be able to hotload changes, and that could affect performance; some code naturally fits the idioms needed though.

I find it amazingly valuable to be able to change the program without having to lose the program state; but it requires different thinking, and it is easy to mess things up in exciting ways that are different than many other systems. It's amazing to fix a bug and deploy it in seconds into a live system with millions of active connections; it's also amazing when you try to fix a bug and break millions of active connections in seconds, but in a negative way, because now you and your users have to pay the costs of reestablishing all of those connections.

OTOH, the key issue is interchange of state and messages between versions, and that's an issue that comes up in almost all distributed systems that update without downtime, so most people have to deal with that issue anyway, just usually not within the much smaller scope of a single task.

RodgerTheGreat · 4h ago
Freedom to modify any part of your environment live in an Image is wonderful when your changes work perfectly, and horrific if you make any low-level mistakes; you can easily destroy the tools necessary to back out changes to your tools. It gets even worse in a world where you might run code from someone else with malicious intent!

I think it's generally better to aim for what the old C2 wiki called "Alternate-Hard-And-Soft-Layers": substrates that are less malleable with dynamic layers floating on top. We can do much better in terms of malleability than mainstream operating systems without descending into the complete insecurity and fragility of a classical Lisp Machine or Smalltalk environment.

rtpg · 6h ago
The "modifiable image" model to me poses a huge problem of just not knowing what has changed and what is going on. I believe that things like Pharoh integrate into version control, but just on a fundamental level being able to throw away everything and go back to some notion of a clean state is very helpful when working on a mutable system.

Distributed version control and CI makes it way more tractable to work on even a small team IMO.

I would be very curious to see someone stream a "real" workflow using something like Pharoh or other smalltalk-like envs though. There's a bunch of short clips showing "beginner" demos but for such a visual system I would expect there to be more detailed presentations of the actual workflow.

mkfs · 3h ago
Pharo and Squeak had a DVCS called Monticello that integrated with the system much better than git, but they abandoned it in favor of git, primarily so they could use github, expecting it would raise their profile amongst developers (also the VM was already developed there). The end result was the method-level modification history, including timestamps and authorship info, was lost, since it didn't fit into git's model of treating everything as text files or blobs.

Git is also much more confusing than Monticello.

detaro · 2h ago
> The end result was the method-level modification history, including timestamps and authorship info, was lost, since it didn't fit into git's model of treating everything as text files or blobs.

That seems odd, they seem easy enough to map to each other?

> Git is also much more confusing than Monticello.

Not my experience. Uni had us use Smalltalk for a bunch of courses, and Monticello was universally hated (and people caused their to-be-expected number of messes with Git too, but still got on with that much better)

mkfs · 2h ago
> That seems odd, they seem easy enough to map to each other?

Not unless you treat every method-level modification as a separate commit.

90s_dev · 4h ago
Hot module reloading is very useful and part of why I added it to Node.js, but it has its time and place, and it's not well suited to every problem. For example, when you have a lot of live objects, like a GUI has, it's very difficult to know which objects are stale and need to be replaced. When I use it in Node.js for developing websites, I use HMR as a means to skip some parsing/evaluating, but I still re-build the entire website from scratch so that there's no (okay a little) state left over from the last build.
ChrisArchitect · 7h ago