[Vm-dev] Proof of Concept of a pharo cog spur VM to OpenBSD

Christian Kellermann ckeen at pestilenz.org
Wed Nov 1 08:46:55 UTC 2017

Dear List,

I have managed to successfully build a pharo cog spur VM on the
OpenBSD operating system (http://openbsd.org).  I have put up some
patches on a fork of the opensmalltalk-vm github repo:

I habe briefly started current Squeak with it also, but did not
build a specific VM for it.

I would consider this a proof of concept at the moment and would
like to discuss how to get this into the main repo.  OpenBSD needs
a couple of changes, all of them pretty minor. Mostly this is due
to different location of include files (errno) or unsupported linker
flags (-lrt) or not included by default search paths (/usr/X11R6/{include,
lib), /usr/local/{include,lib})/

However just hacking them into the mvm script for one machine does
not seem right, are these files generated by something else?

I have also disabled the building of third party components. I am
currently relying on them being installed already by the OS package
manager.  If this gets integrated in a real OpenBSD package these
dependencies would be made explicit in the package's meta information.

Also how do you test these VMs? I am a SmallTalk beginner so I am
not yet familiar with the available tooling that's out there.

To reproduce this build on OpenBSD, make sure you compile/install
the resulting binaries into a partition that is mounted with the
OpenBSD specific wxallowed flag (usually /usr/local). Otherwise the
JIT will just cause a segmentation fault as mapping memory writable
and executable at the same time is prohibited by default.

My next planned steps would be:

- Get the needed patches into your repo
- Build all VMs under OpenBSD, once I know how to test those properly
- Propose an update to the outdated OpenBSD squeak package
- Propose a port of Pharo to be included in the OpenBSD ports tree
- Write a plugin for OpenBSD's sndio sound system (Pulse seems to
  work but that is usually not installed)

Looking forward to hearing your opinion.

Kind regards,


P.S.: There is also still some issue with the FFI binding a ByteArray
from libc (i.e. the 'environ' Variable). This fails for two reasons:
LibC is looking for the wrong libc module name ('libc.so.6' instead
of 'libc.so' or more specific to OpenBSD 'libc.so.<major>.<minor>'
for example 'libc.so.90.0'). And then I get an External Allocation
error. I am not sure whether this is a bug in the VM handling 64bits
or in Pharo. I have not yet tested this behaviour with Squeak yet.

May you be peaceful, may you live in safety, may you be free from
suffering, and may you live with ease.

More information about the Vm-dev mailing list