Skip to content
Choose a tag to compare


@fniephaus fniephaus released this
· 3829 commits to Cog since this release
Choose a tag to compare

N.B. For Squeak/Pharo/Croquet please use the archives whose names begin with
Cog or cog. The archives whose names begin with nsvm or Newspeak are
for Newspeak and are missing plugins required by Squeak/Pharo/Croquet.
VMs with "mt" or "MT" in the name are multi-threaded VMs which support
non-blocking FFI calls. The archives containing "Spur" or "spur" are
VMs using the new Spur object representation and garbage collector and
should be used with Spur-format Squeak/Pharo/Croquet or Newspeak images.
Squeak V5, Newspeak and the upcoming Pharo release have moved to Spur.

N.B. Only the Newspeak installers on this site include a sources file. This
saves space. To ensure access to the sources file using the other VMs

  • on linux add the sources file to the same directory as the vm, e.g. add
  • on Mac OS add the sources into the Resources directory of the app bundle
  • on Windows add the sources file to the same directory as the vm

Archives whose names include "64" are 64-bit Spur VMs. They should be
used with 64-bit Spur images. Sample 64-bit images can be found at


There are two variants of the Linux VMs; those ending in "ht" have a
heartbeat thread, while those that don't use an interval timer for the
heartbeat (the Windows and Mac VMs have a threaded heartbeat). The
threaded heartbeat is better (for example, signals from the interval timer
interfere with system calls, etc), but to use it one must have a kernel
later than 2.6.12 and configure linux to allow the VM to use multiple
thread priorities. To do so, create a file called VM.conf where VM is
the name of the vm executable ("squeak" for the Squeak vm, "nsvm" for
the Newspeak vm) in /etc/security/limits.d/ with contents:

*       hard    rtprio  2
*       soft    rtprio  2


sudo cat >/etc/security/limits.d/squeak.conf <<END
*       hard    rtprio  2
*       soft    rtprio  2
sudo cp /etc/security/limits.d/squeak.conf /etc/security/limits.d/nsvm.conf

Only new processes will have the new security settings. Users must log
out and log back in for the limits to take effect. Services must stop
and then restart for the changes to take effect. To use this VM as a
daemon, e.g. under daemontools, you'll need to raise the limit manually.
Make sure you're using bash and before your launch command, raise the max
thread priority limit with ulimit -r 2, e.g. versions of the following
script will work on ubuntu

cd /path/to/squeak/directory
ulimit -r 2
exec setuidgid <account> ./coglinuxht/squeak -vm display-null -vm sound-null squeak.image


The Windows VMs are not "dpiAware", which means that by default the display
is scaled and display pixels are not directly mapped to screen pixels. If
this behaviour is not desired you can disable scaling by editing the VM's
manifest file (e.g. Squeak.exe.manifest), changing the "false" in
false to "true", or simply deleting the manifest file.

CogVM binaries as per VMMaker.oscog-eem.1873/r3732

Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no
message needs to be sent to the receiver to evaluate a primitive on it. This
would make possible Context>>receiver: obj tryPrimitive: idx withArgs: args.

Spur: Fix ephemerons (at least for Gule's test case).

The mournQueue is of course a root for the scavenger and so must be visited at
the start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumerating

Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check
for an ephemeron being fireable. An as-yet-firable ephemeron might get added to
the ephemeron list and later its key may get tenured, rendering the ephemeron
unfirable in that cycle.

Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Again
tenuring could cause contents to be forwarded and hence read barrier is needed.

Fix two bugs in ephemerons (found by Gille Polito - thanks!).

  1. obj stack extension must happen with marking set to true if new pages aren't
    to be GC'ed. So move the assignments to marking out into markObjects: where
    they can surround nilUnmarkedWeaklingSlots.
  2. fireAllUnscannedEphemerons needs to enumerate the unscannedEphemerons set
    properly, an oop at a time.

Fix asserts that check for ephemerons so that the change in an ephemeron's
format once it gets added to the mournQueue doesn't break the asserts;
isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in
the mournQueue.

Fix the Spur implementation of becomeForward:copyHash: for becomming immediates
with copyHash false. Fix the scavenger's referenceCountRememberedReferents:
for forwarding to immediates, and add a printRememberedSet convenience.

Make pushLiteralVariable: store unfollowed literals back into the literal frame.
Do so in a function off to the side, not inlined into the interpreter loop.

With the above ephemeron changes Guille's test case passes:

  | e |
  Smalltalk supportsQueueingFinalization: true.
  e := (1 to: 200000) collect:
    [:i| Ephemeron
        key: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr)
        value: Object new].
  Smalltalk garbageCollect!

Simplify the arg validation in FloatArrayPrims>>prmNormalize & primLength.

Fix the configuration of the gdb-7.x support for for the GdbARMPlugin (COG=1).
Put #if COG around a couple of changes to the gdb-7.10 code.
Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)