Squeak

From Organic Design wiki
Squeak.jpg

Squeak is a modern, open source full-featured implementation of the powerful Smalltalk programming language and environment. Squeak is highly-portable - even its virtual machine is written entirely in Smalltalk making it easy to debug, analyse, and change. Squeak is the vehicle for a wide range of projects from multimedia applications, educational platforms to commercial web application development.

One aspect of the Squeak implementation that is of importance to us at Organic Design is that it unifies the run-time and development environments - i.e. there's just one persistent object environment that's always "running".

Another aspect important to us is self containment, this unified runtime environment contains all the Squeak source for the system itself, and this is changeable from within the Squeak environment.

Squeak may be downloaded at no cost, including all its source code. Unlike other languages, Squeak is distributed in a prebuilt virtual machine image form rather than bootstrappable source code.

There has been much debate as to whether the Squeak license qualifies as free software or not, due to the presence of an indemnity clause in the original Squeak License. Version 1.1 of the environment, originally released on October 1997 under the Squeak License, then released in May 2006 under the free and open source Apple Public Source License, then in 2008 relicensed again under the Apache License allowing inclusion in the OLPC initiative. Many of the Squeak community were still unhappy with the licencing and in 2008 a fork of Squeak called Pharo was created to have a Smalltalk that is under an official open-source licence. However in 2010, Squeak too was cleaned and licensed under the same MIT licence as Pharo.

Squeak 4.1

Squeak 4.1 combines the license change occurring in the 4.0 release with the development work that has been going on while the relicensing process took place. Much of the work in this release has been focused on fundamental improvements. Major achievements are the integration of Cog's closure implementation, the improved UI look and feel, the new anti-aliased fonts, the core library improvements, and the modularity advances.

I found Squeak 4.1 to be much more slick and snappier than 3.9. It has a more modern look and feel to it and the fonts look properly anti-aliased now whereas they looked somehow a bit "budget" in 3.9.

I downloaded the Squeak-4.1-All-on-One.zip package and got an error on installation saying Running 32-bit Squeak on a 64-bit System. Hope the 32-bit runtime libraries are installed... No such file or directory. I did a bit of searching but couldn't find any documentation on how to run it on a 64bit machine, but in the end it seemed to run fine simply by renaming the Contents/Linux-i686 directory to Linux-x86_64.

Philosophy

Excerpt from Squeak's place in the universe

Imagine a system as immediate and tactile as a sketch pad, in which you can effortlessly mingle writing, drawing, painting, and all the structured leverage of computer science. Moverover, imagine that every aspect of that system is described in itself and equally amenable to examination and composition. Perhaps this system also extends out over the internet, including and leveraging off the work of others. You get the idea: it's the Holy Grail of computer science. All and everything. So if some new approach comes along that takes us closer to that ideal, but at the cost of a break with ST-80 tradition, we will probably take the new approach.

Remember, I said "personal" computing environment. This has many ramifications. One aspect is that things must stay small and simple enough that they remain comprehensible and accessible to one person. One approach to desktop publishing would be to somehow intertwine Squeak with Microsoft Word through ActiveX: it's easy, just use what's there and order three sets of manuals each six inches high ;-). Our approach, instead, is to do it all from scratch in Squeak, simply and generally, possibly omitting some features, but ending up with something that most folks on the Squeak list could understand, and that serves most of our needs. Another of the "personal" aspects of this approach is that the end result is independent of Microsoft and Intel; it will run just fine on any of the bare chips from Acorn, Hitachi or Mitsubishi, that cost $10-$20 each, with nothing but a BIOS.

Projects

Here's a list of some of the Squeak projects which are most relevant to the OD roadmap, for a more complete list, see the official projects page.

  • Cog - a faster virtual machine included as standard in Squeak4.1 and Pharo
  • Seaside - a framework for developing sophisticated dynamic web applications
  • Pier - a CMS built on Seaside, Pier is version 2 of SmallWiki
  • Illiad - web application framework
  • OpenCobalt - a 3D p2p authoring environment for simultaneous team content development of interconnected simulations, models, and simulated environments
  • SqueakSource - the Squeak equivalent of SourceForge that supports distributed development
  • Scratch - a programmable toolkit that enables kids to create their own games, animated stories, and interactive art
  • SqueakNOS - a minimal OS replacement that boots straight into Squeak with minimal dependencies and no Linux kernel
  • Magma - a multi-user object database with the capability of forming the foundation for p2p model sharing
  • OpenSophie - a digital media assembly tool to combine images, text, video, and audio into a single multimedia document such as slideshows, presentations and annotated videos.
  • Morphic - a direct-manipulation User Interface (UI) construction kit based on display trees. It works with graphical objects called Morphs. It replaces the original Model View Controller graphics toolkit of Smalltalk-80
  • NetMorph - a visual mobile agent system allowing windows to move freely across peers desktops. It will lead us into a new kind of collaboration!
  • OpenAugment - Created in the 1960's by Dr. Douglas Engelbart and his imaginative team at Stanford Research Labs (SRI), Augment is one of the most groundbreaking and important historical artifacts of the software industry
  • Traits - With Traits, classes are still organized in a single inheritance hierarchy, but they can make use of Traits to specify the incremental difference in behavior with respect to their superclasses
  • BabyUML - current programming languages are focused on individual objects as they are specified by their classes; there are no explicit language constructs for describing communities of interacting objects
  • Spoon - a minimal object programming system derived from Squeak, with new approaches to organization, collaboration, and deployment

Squeak Development

Here's an analogy in terms of open source applications for the Squeak development applications roles from this post:

  • SqueakSource is like sourceforge.net. It provides central hosting for code under development, with Monticello revision control (and RSS feeds, project wikis etc.)
  • SqueakMap is like freshmeat.net. It is a central directory providing standardized information about all kinds of downloadable packages. The packages may be uploaded to SqueakMap or linked from elsewhere.
  • Package Universes are like a GNU/Linux distribution such as Debian. They are a set of packages which have been selected from SqueakMap and undergone more QA and integration work - testing, fixes, dependency information - so that you can install any of the packages and expect it to work.
  • Update streams, which are provided for some of the major squeak images, used to be the main way of installing updated and new code, like Debian's unstable update stream. They are increasingly being used in a more limited way, more like the security updates which Linux distributions provide for their major releases.

The boundaries between these are not always sharp, there is ongoing experimentation in adding the features of one to another (eg Kabungu adds dependency information to SqueakMap).

Integration with the OD concepts

In the Nodal Model, nodes are the equivalent of objects in Squeak, so integrating the two together would probably have something like the following:

  • The runtime Squeak objects form the most local node cache
  • Nodal multiplexing storage and distribution integrates the local cache with slower, larger caches and other peers
  • The Squeak image running on peers resides in the network, initially as binaries available on the website
  • Later the Squeak image would be collaborated on within the network using only in-network and in-squeak applications
  • Only the nodal model's foundation ontology is used, nothing lower such as list space
  • Nodal interface for manipulating nodes and organisational workflows is available in browser, squeak and cobalt
  • Nodal workflows have limited events/schedule that tie in to squeak environment, but have more specific tools for manipulating parent environment through foundation ontology relations and objects such as Roles, Portals, Records and other ERP classes.
  • Initially some transport/persistence layers such as DHT may have to be in C
  • Can run as a site, a local app, or bootable ISO running SqueakNOS instead of Peerix

The Squeak Interpreter

The current Squeak interpreter combines a classic ST-80 interpreter with a simple yet efficient 32-bit direct-pointer object memory, and incremental garbage collector. It also includes a BitBlt graphics system that supports 1-, 2-, 4-, and 8-bit indexed colors, as well as 16- and 32-bit rgb colors, plus a "warp drive" that supports fast rotations and other affine transformations, as well as simple anti-aliasing. Other notable, and equally portable, abilities of Squeak include 16-bit sound input and output, and support for sockets and internet access.

That design, and adhering, for better or worse, to the image model (the entire state of Squeak is manifest in an image file), yielded a system of extreme portability and sharability. Any image file will run on any interpreter even if it was saved on very different hardware, with a very different OS, or no OS! Squeak's portability and sharability, plus its malleability (since it is all in Smalltalk, a competent Smalltalker can change anything about it), has aroused much interest in the academic community, and what I will call the "independent" computer science community. By this phrase, I include people who are not so interested in one language or OS over another, but who have some passion (numerical analysis, graphics, distributed computing, music synthesis, O-O education, etc.) and want a system that can provide the most flexible and immediate command over experiments in their field of interest.

Cog

Cog is a virtual machine designed for Smalltalk and other similar dynamic languages. Cog builds on the Squeak virtual machine adding a JIT compiler, aggressive in-line message caching and effective optimization of Smalltalk's first-class activation records. Cog is the virtual machine underlying OpenCobalt. Like the original Squeak VM, Cog is implemented and developed in Smalltalk, and translated into a lower-level language to produce the production VM. Being a Smalltalk program it is a delight to develop. Cog is available under the MIT open source license and is unencumbered for commercial deployment.

See also