Self’s Morphic interface actually has a lot of charm, but unfortunatly it is in a early NeXT fashion. Lots of grey. Or is that gray? One of the things which scratches an itch for me is cleaning up the interface to make it more comfortable to use.

Adventurous people can download a snapshot which shows the current thinking. Not much has changed, but font styles and sizes have been altered and some colour brought in:

The guiding principles for this makeover, which come from the idea of Self itself, is the creative intersection between minimalism and humanism.

More will be coming – why not join us for the ride?




One of the strengths of Self is the number of great published papers that were written by the Self team at Stanford and later at Sun.

We’ve been trying to collect all of these on the Self website on our published papers page – you should really check them out.

Recently John Maloney sent me a paper of his and Randy Smith’s on Morphic from 1995, which I’ve added to the list. It’s called “Directness and liveness in the Morphic user interface construction environment” and its worth reading for the philosophy and structure behind Morphic, Self’s main user interface and its later incarnations in Squeak/Pharo and Dan Ingall’s Lively Kernel.



It has been decreed that it is high time Self joined the Great League of Important Programming Languages (TM) and organised its own IRC channel on Freenode!


Anyway, if you have any Self questions then pop on by Freenode channel #self-lang and visit us.

We promise to be friendly, if not necessarily coherent.



Introspection is Self observation, which makes sense because in the end computers are more about us than anything else. At the end of 2010, it is time to take stock of ourselves, considering what has been done (and not done) and prepare for the inevitably ignored New Year’s Resolutions.

For those who have just arrived at the party

The purpose of the Smalltalk project is to provide computer support for the creative spirit in everyone. – Dan Ingalls

Self is Smalltalk, only more so. – David Ungar

In our vision, the Self programmer lives and acts in a consistent and malleable world, from the concrete motor-sensory, to the abstract, intellectual levels. At the lowest, motor-sensory level of experience, objects provide the foundation for natural interaction. Consequently, every visual element in Self, from the largest window to the smallest triangle is a directly manipulable object. – Randy Smith

We live embedded in sensory experience and we act and respond to more than just rational discourse; the software worlds we build need to reflect that.

The Self environment attempts to provide an integrated intellectual and experiential computing narrative for supporting collective and individual creativity. Self is not only about personal computing but also collaborative computing.

The main story that Self tells is that everything is an object and objects respond to messages. Self thinks of objects as being made of slots, each with a key and a value. If the value is a method, then when a message that is sent to the object matches that slot, the method will be run. Objects can share slots by delegating message lookup to each other.

Messages in Self (and hence Self’s syntax more generally) follow a modified version of Smalltalk’s keyword based syntax.

Self comes with a user interface, morphic, which attempts to make objects visually concrete entities which can be physically manipulated.

Self currently comprises a fast VM written in C++ for MacOS X and Linux x86, together with text sources in Self which can be compiled by the system. The runtime state of a running Self system can be saved in a snapshot, like a Smalltalk image.

The story so far

They always say that time changes things, but you actually have to change them yourself. – Andy Warhol

Since this is the first introspection, we should begin the tale in the heat of the summer of January 2009 when the website went live.

In the last two years, we have begun to reinvigorate the Self community. Self now has a website, a more active mailing list and a blog.

Documentation has been consolidated into the Self Handbook, and old Self papers have been converted from PS to PDF and made available on the website.

The Self source code, including both the standard objects and the C++  source for the VM, is now available on GitHub.

David Ungar’s port to Linux has been finished off, and Self 4.4 has been released with prebuilt VMs and snapshots for Mac OS X and Linux x86.

Speaking of David, he was the deserving recipient of the Dahl-Nygaard Senior Prize for 2009 for his body of work, including Self.

Why we do it

I am glad you have a cat, but I do not believe it is So remarkable a cat as My Cat. – TS Eliot

Despite such JavaScript wonders as Dan Ingall’s Lively Kernel, Squeak’s ongoing improvements and Gilad Bracha’s NewSpeak, we believe that Self still has a place in the computing multiverse. We have a foundation of a good VM and a solid object model. We believe that Self is not a bad place to start if you want to invent Self.

Blue and Pink

Einstein’s space is no closer to reality than Van Gogh’s sky. – Arthur Koestler

Back in 1998, the old Squeak Central talked about their changes and aspirations based on an allusion to Arthur Koestler’s metaphor of progress in two planes: the incremental improvement plane (which Alan Kay dubbed the “pink” plane) and the paradigm shift (or “blue”) plane.

The pink plane for Self is made up of those improvements needed to get Self to the point where we can seriously start building the infrastructure needed to attract people who want to use Self for industry, academic or research uses. Examples of large pink projects include a Windows port, an ARM port and Unicode support; smaller pink projects include a proper unit testing framework, a proper streams library and a webserver.

Ideas which aim to make Self more like itSelf live on the blue plane. It is lucky that planes are unbounded, because blue ideas are legion. Some examples:

  • Since the Self syntax was devised, languages such as Ruby, Python and Haskell have shown that the old shibboleths of syntax are losing their grip on the collective conscious; Self’s syntax could be simplified and streamlined.
  • Computers are no longer stand alone entities; interworld communication would support greater collaboration and integration with other Self worlds, and other non-Self resources.
  • The old fears of the Smalltalk image linger but programmers throw VMWare and VirtualBox virtual machine images around like lego blocks; building an object storage facility into the snapshot could make Self worlds more self-contained and flexible.

We may or may not do any of these.

April is the cruellest month

OK, enough hype. – Larry Wall

Since its exile from the warmth of the Sun into the wasteland of Open Source, Self as a project has been without a central core of people paid to get things done. But wastelands aren’t really. We’re actively seeking people to collaborate: if our goals resonate with you and you want to help out then get in contact.

However this early period of revival is bound to be slow and hesitant. Bear with us – or even better, join us!

For all the fish

Finally, the thanks: Firstly to Randy Smith and David Ungar, the parents, and all the team at Stanford and Sun in the olden days, and to Adam Spitz, Jan-Paul Bultmann and Chris Double for their contributions to Self’s reawakening.

‘Til next time, Russell

Most modern Smalltalk80 implementations have more or less converged on a standard exceptions framework as set out in the ANSI spec.

There’s a description here (it’s for Pharo, but is more or less the same as for Squeak, GnuSmalltalk etc)

Self doesn’t have an exceptions framework. There is a generally available ‘error:’ message, whose meaning is globally defined; apart from that there is a preference for passing error handlers to methods which are likely to need them (such as ‘at:IfAbsent:’ or ‘do:IfFail:’).

Is this enough?

An ANSI Smalltalk style framework should be doable. The core mechanism is winding up the stack and searching it for a suitable handler, which shouldn’t require any adjustment of the VM. The question is whether we want to.

The plus side is that ports of open source Smalltalk80 code might be made easier. For example, both SUnit and the new Xtreams stream library have built exception handling into the way they do things.

However, even if we adopt the idea of resumable exceptions, our framework would be likely to be different. The ANSI system is class based and relies on hierarchies of exceptions, where an EndOfStream signal is a subclass of an Exception which is a subclass of Error (or vice versa)

For Pharo this looks like:


This of course leads to the well known code pattern of:

| result |
result := [(StandardFileStream oldFileNamed: 'error42.log') contentsOfEntireFile]
    on: FileDoesNotExistException
    do: [:ex | ex fileName , ' not available'].
Transcript show: result; cr

This feels rather unSelflike (unselfish? unselbstlich?). It relies on the identity of objects to determine what happens to them, and also their class membership – confusing the object’s name (ie the path to the object from the lobby) with the object’s identity and behaviour and using a deep class hierarchy as an adhoc pattern matching mechanism.

Part of what I would like Self to do is to move away from unecessary reliance on the lobby as a guarantor of identity, and adopting a rigid lobby based mechanism for determining exception behaviour  wouldn’t help.

If the standard class based ANSI exceptions framework is not suitable for Self, what are the options? Is a stack searching resumable exception framework something which should be aimed for at all? Or should the concept of passing exception handlers to objects be explored further?

Dear all,

I would like to announce the release of version 4.4 of the Self environment.

Self is a prototype-based dynamic object-oriented programming language, environment, and virtual machine centred around the principles of simplicity, uniformity, concreteness, and liveness.

Self includes a programming language, a collection of objects defined in the Self language, and a programming environment built in Self for writing Self programs. The language and environment attempt to present objects to the programmer and user in as direct and physical a way as possible. The system uses the prototype-based style of object construction.

Self is the canonical prototype based language within the Smalltalk family.  It is open source under a BSD-like licence and includes a fast VM and a development environment built on the original Morphic GUI that Squeak’s Morphic is a descendent of.

Changes in release 4.4 include:

  • an improved Quartz based backend for the MacOS X version and
  • a working port of Self to Linux (x86);
  • various bug fixes and general improvements.

You can download Self from the website at in binary form and all sources are available either by running Self or at

Documentation includes the Self Handbook at and a large number of published papers on Self at

You can keep up to date with Self by following either the Self blog at or joining the Self mailing list – details at and archive at

Be selfish! Download today!

Chris Cunnington has been making a number of Smalltalk videos available on his YouTube channel; one of these is a short introduction to Self from the point of view of a Smalltalk-80 programmer. Enjoy:

Hi guys,

I’ve released Self 4.4 Beta 1.

Download VM installers for MacOS X and Linux and Clean and Demo snapshots from:  As usual, the sources for the Self VM and objects are available from including as a tarball.

Barring minor fixes, I will reissue this release as Self 4.4 at the start of April. The proper description of Self 4.4 is a revived Self running on modern Mac OS X and Linux x86 and ready as a base for new functionality.

Self 4.4 will be the first Self release since Self 4.3 which was released in June 2006. In future we will attempt a slightly faster turnaround 🙂

Please post bugs to the Self bugtracker at and to this mailing list.




Since Alpha 2 we have changed (this is a quick dump from commit messages):

  • Changes to SelfDroplet to ensure proper registration of filetype
  • Minor changes to website
  • Fix for bug ticket #3 – Compressed snapshots now work on Linux
  • Fix to UI1 text editing and small improvement to error handling
  • Fix for bug ticket #2 – Self will now compile on Ubuntu
  • Fix for bug ticket #1 – Linux: Display will now reopen after saving world in new snapshot
  • Added -Wno-write-strings flag to GCC compile
  • Initial copy of Self Handbook (incorporates existing manuals in RST for Sphinx)
  • Changes for Snow Leopard
  • Add a nice icon for the Dock in MacOS X
  • Removed some binaries from the git repository, split sortedList out of the list module.
  • Fix colorsFor: in ‘traits ui2Image’ to account for mapped or unmapped
  • Add PNG support and fix JPG/GIF support in webBrowser
  • Changed flag to be “-headless” to start image without ui2
  • Added Chris Double as an AUTHOR
  • Make webBrowser send Host: header
  • Add linux build files to .gitignore
  • Set the module for linux socketConstants
  • Added value:With:With:With:With:With:With:.
  • Get builds working under Arch Linux
  • Add a socketConstants slot for os_file under linux
  • Fix sockets under Linux
  • Clarification of copyright AUTHORS to include Sun and Stanford University
  • Split mirrorProgramming from mirror, so that Klein won’t need to file it in.
  • Added blockTests.self.
  • Clean up and clarification of copyright terms
  • Source tree cleanup
  • Fixes to UI1
  • Starting to refactor the tests to make it easier to use them in Klein.
  • Also refactored the slotFinder to be iterative instead of recursive.
  • Made the javaServer stuff file in OK (sort of, I think). It still needs to be filed in from the terminal, without the Self desktop running.
  • Updated website to Sphinx 0.6.1 and added links to blog
  • Fixed a typo in some comments, added max: and min: methods to the ordered mixin.

Last year, David Ungar, the co-creator of Self, spoke at Stanford as part of the Department of Electrical Engineering Computer Systems Colloquium. This is a great talk, covering the history of Self and Dave’s role in it:

After looking through some of the issue tracking sites that people  on the Self mailing list kindly pointed me to, I’ve set up a trial issue tracker for the Self project on Lighthouse.  It looks like Lighthouse has a good balance between power, simplicity and user friendliness.

It is at:

You can see from the information there that the current plan is to issue a new release in late January, and a hopefully final Self 4.4 on Linux and Mac in late February.

We can then move on to more exiting improvements!

I encourage everyone to add issues etc…