[ANN] Pharo Headless – Beta

For the anxious, you can get real headless vm and image from zero-conf.

$ wget get.pharo.org/64/80+vmHeadlessLatest | bash

Zero conf scripts remain unchanged for users.

However, if you are launching the VM by hand from the executable
instead of the launcher scripts (pharo and pharo-ui) as in

$ ./pharoexecutable Pharo.image

the image will launch in headless mode and will not open a window.
To launch it in headfull, you can use the –interactive argument after
the image, which will make the image open a window using SDL2.

$ ./pharoexecutable Pharo.image –interactive

Long version

Hi, this mail is the happy intermediate result of the work that us,
the Pharo Consortium Team, has been doing in the last couple of
Our main objective is to have a real headless implementation of Pharo
where all the responsibility to open or not a World window (or other)
is handled by the image.
For doing so we have done a series of modifications in the image and
the VM side.
We consider this is the path that Pharo 8 and following versions
should follow, as it will severely improve server-side and command
line Pharo and in building custom desktop applications.

These modifications are available only in 64-bits machines (Windows,
OSX, and Linux).
ARM32 and 64bits headless is in the roadmap, but it is delayed because
we have prioritized our three major platforms for this first couple of

All this work is based in Opensmalltalk-VM and Ronnie’s initial work
on headless.
We are really grateful to all the contributors in the history of this
nice product.
To achieve a real headless VM we have brought modifications in the
source tree because most of the platform code to open and manipulate
windows is not required anymore.
Instead, we use the SDL2 library that implements a nice layer on top
of the OS and allows us to manage on the image side through FFI.

So this mail is now an open call for (beta?)testing.
The sources of the current VM we are building are in the headless branch in
And we have set up a CI that is both building and testing the VM in

For the future we have a lot of ideas, that will wait for another long
email or a beer-talk @ESUG.
We want to hear your ideas!!

Image-Side Improvements

– The image handles the creation or not of the main world window.
– We incorporated the idea of World renderer, where different backends
are used to render the world.
– We have 3 backends: VM support (compatibility with non-headless
VMs), and OSWindow with two backends: SDL and GTK3+.
– The modifications in the image are fully backward compatible with
the non-headless VM and are pushed since weeks in the latest 8.0
– We move the handling of events to the image side when using SDL and
GTK3+, opening the door to a richer set of events and finer-grained
control over them.
– SDL and GTK versions are implemented using FFI calls.

VM-Side Improvements

– VMMaker code migrated to Tonel thanks to Feenk and included in the
repository of the VM.
– Making VMMaker execute in Pharo 7 and 8.
– Removing GPL code from the VM repository (GDB).

– Slowly adding new tests for the JIT / Slang and VMGeneration.
– Restructuring of the source code.
– A new simpler CMake build.
– Generate VM code from Slang on each build.
– A CI process to validate (including the run of the tests in Pharo
and the ones adding to the VM).
– Simplification of the codebase.

– Maximize the reuse of code between the platforms (preferring the
standard versions over the platform-specific).
– Cleaning up duplicated code.
– All the plugins are now external plugins.
– The VM is now a dynamic library. This is a first step towards
embedding Pharo into other applications.
– The main executable is a thin frontend (you can change it or
implement your own).

– Removing unused plugins.
– Improved crash dump. Especially the crash dump works now in Windows 64bits.
– Dummy implementation of Security plugin (it is going away…. eventually).
– Cleanup of SSL, UUID, and Socket plugin.

– Cleanup of conditional code (Still to improve).
– Improving the types used in the functions (we have to be neat to be
– Improving the lookup of modules
– Improving the logging of the VM
– Improving the handling of VM arguments

Thanks a lot for reading so long!!
We hope you enjoy the VM and please tell us all the problems you find!!

Pablo, Guille, and Esteban

%d bloggers like this: