A quick implementation of a Shouter class in Pharo 9.0.

Screenshot of a Pharo Smalltalk environment displaying a Browser (with the implementation of the class) and a Playground (with usage of the class). There’s a menu bar running across the top of the screen, and a taskbar running across the bottom. The usual Smalltalk browser has a modern interface with tabs, radio buttons and disclosure triangles and icons in lists. The Playground has an inspector in a pane.

The same, in Squeak 5.3.

Squeak has the same arrangement of windows but their appearance is a little more dated: there are few icons, no tabs and the the Workspace (in place of Pharo’s Playground) has no integrated inspector. In comparison, it’s apparent how much work has gone into Pharo’s interface.

This time in Squeak 4.6, released in July, 2015 (4.0 was released in March, 2010). It’s 32-bit, so I had a bunch of libraries to install into a container before I could get this going.

This version of Squeak looks almost identical to its following version, but font rendering is noticeable worse.

And another, this time in Squeak 3.9, released in Mar, 2008 (3.0 was released in June, 2001). I quite like the Unix-like handles on the corners of the windows, and the same handles for resizing splits.

Again, the layout of windows is almost identical. Window borders are shaded with various colour gradients. Buttons are plain white, looking a little out of place. Scrollbars are very thin.

Once again, now in Squeak 2.8, released in August, 2000 (2.0 was released in May, 1998). Now I know where the assortment of window border colours came from! This seems to be the last version to use the eponymous MVC-based user interface. I love left-hand scrollbars. Morphic is available as a preview. No unit testing classes.

The usual arrangement of windows is available but now in solid, pastel colours reminiscent of sticky notes. The windows have thick, black borders. The text rendering has no anti-aliasing. Only the scrollbar for the view the mouse is resting over appears, and it does so outside of the view, to the left.

This is the perfect environment for test-driven development… which isn’t surprising, since Kent Beck wrote SUnit for Smalltalk.


this is moving 😢

Squeak was my first experience with learning/writing code

I made the so called bank Account tutorial in order to learn object orientation

I remember a set of objects that had a visual representation, they could be manipulated visually with the mouse

Later I was hired as a java dev and I grokked object orientation becaise I has played with Squeak !
Jeez !

A whole life !!


I would have liked to have also taken a look at versions 1.1–1.3 tonight but I can’t find versions of the VM which both compile and are compatible with the image formats. 😤


I can only find Squeak 1.4 in my Ubuntu repos !

Why so old ? 😮

@AbbieNormal I didn’t think there was a 1.4 release! Could it be the virtual machine’s version number?

@AbbieNormal I can think of few better introductions to programming! Squeak is still in development. 😉



Going back to Squeak 2.8… by default it displays in 8-bit colour, and results in every colour being translucent. You can make things out if you place it over a dark background. It also does this in 16-bit. It’s fine in 32-bit, except for text selections, the background of which become completely transparent.

Screenshot of Squeak and a GNOME Terminal. All of the colours in the Squeak window feature transparency, making the contents unreadable. Screenshot of Squeak and a GNOME Terminal. Almost all of the colours in the Squeak window are opaque, except for a text selection, the background of which is completely transparent.

I do not — and do not want to — know enough about the X windowing system to know why it does this, but since Squeak 3 doesn’t do this, I feel annoyingly compelled to find out why.

Turns out, Squeak 3 does do this after all, it just defaults to 32-bit colour… but Squeak 4 does not, at any colour depth. Squeak 4’s VM was new and support for X windows uses a plugin architecture, perhaps the back-end was reworked.

I think I’ve found the inflection point: Squeak 3.10.2 suffers from translucency, but Squeak 4.0 — which was a re-licensing release and should be functionally equivalent to 3.10.2 — does not.

The 3.10.2 image run in the VM released with 4.0 also doesn’t have any problems with translucency… so at least I know the VM is the issue, and not the image.

Back to the ‘Hello, world!’ Shouter class: this time in Squeak 1.31, released in January, 1998. This looks almost identical to Squeak 2.8 but the Method Finder is missing and Morphic shows much earlier progress.

The familiar arrangement of pastel-coloured windows is pretty indistinguishable from Squeak 2.8.

Squeak 1.13 is the earliest (and last) version of Squeak I’d like to get running, but whilst the earliest Unix port (from 1.22) compiles fine, it has a segmentation fault. I wonder whether it would be quicker to run the Mac release in an emulator.

I found the Unix port release for 1.13. It also compiles fine. It does not have a segmentation fault. It does immediately exit with ‘Could not find an 8-bit PseudoColor visual’.

I’ve continued to explore Squeak these past two days and I’m coming to the conclusion that due to a combination of some not particularly platform independent features of early images, and the time it took the Unix VM to reach feature parity with the Mac releases, I’m going to have a hard time exploring very early versions of Squeak.

Here’s Squeak 1.13, from October, 1996! The image, changes and sources files are on the Squeak Web site, but the Macintosh VM (or its installer) isn’t… so this one is from the 1.20 release (although it seems fine). Morphic is not present in this release, it’s strictly MVC!

An Inception-like stack of windows: QEMU, running Mac OS 9, running Squeak. The interface windows mimic the Mac (in particular, the window titles, title bar and button placement), but the screen size is fixed, and small. The syntax operator for assignment is ‘←’ as it is in Smalltalk-80.

I started this thread with Pharo, a Squeak fork, but there is another fork, Cuis. Its functionality is quite pared-down from Squeak, with quite fewer classes. The layout of the system browser, debugger and so on is similar to their early Morphic versions in Squeak.

Cuis uses much bolder colours for window decorations than early versions of Squeak did. The default typeface is set large. There is a Windows-like task bar showing window thumbnails along the bottom of the display.

@amdt I started with Squeak, then Pharo for many years, and now I am using Cuis. Cuis is a craftsman job: clean, coherent and easy to understand. Its GUI Morphic has been vastly redesigned to be coherent and much easier to use. I like it very much. There is the VectorGraphics system written in Smalltalk (no external library). See my recent post on the experimental circular toolbar.

@drgeo I like Pharo’s features but exploring how some things are implemented involves so many levels of indirection and abstraction… so Cuis is refreshing! I hope something can be done about the font size and window colours, though. 😅

@amdt @drgeo

You get it right: Pharo grows in complexity at a point you can't understand its code. That's the conclusion I got too.
Font size can be changed, the graphic theme too (there are dark themes), see the Preference menu.

Regarding font, the pre-rendered bitmap font are computed with the VectorGraphics packages (100% code)

@amdt @drgeo Font size is easy. Just click on the Desktop and Preferences -> Font Size.

What would be better colors?

@amdt @drgeo Anyway these colors are themeable. You can subclass the Theme class and then set it to your preferences.

@amdt Oh, by the way, the Morphic system is not at all similar to the earlier version of Morphic. It is also a redesign.
The more notable two points are:
1. Each Morph comes with its own coordinates system (origin at its top left) in Squeak/Pharo each Morph as its origin at the top left of the screen and its annoying when composing Morphs
2. The canvas will be vectorized. The code is already working.
There are other nice features like its package system.

@hilaire @amdt ad 1. I applaud you for the design decision, it's annoying in squeak and I stumble over it a lot

@ckeen @amdt
Hey, is not mine! It is Juan et al. work:

@hilaire @amdt I know that

@hilaire That’s quite a bit nicer than the defaults! I’ll have a play around with the preferences.

@fantazo Thanks, I found it!