Bravo! This is wonderful work and it is great to see it getting better all the time.

For those who may not realize, it is actually a very challenging problem to create a virtual machine that can run such a wide range of images. There are various object memory formats to consider, differences over time in the VM primitives and how they match with the images, and other subtle changes in the images and virtual machines over the years. To create a single SqueakJS runtime engine that conveniently supports multiple decades of progress (and history) is truly an impressive achievement.

Dave


On 2023-12-20 23:22, Vanessa Freudenberg wrote:

... and it can not only run the very oldest Squeak images, but even update (!) the latest trunk image.
 
I started working on it in Nov 2013, and the first public release was on 20th December 2013. 
 
That one could really only run Dan's old "mini" image. We've come a long way. SqueakJS certainly isn't the fastest Squeak VM. But it is the most compatible one, and arguably the one easiest to understand and debug.
 
You can try it yourself at https://squeak.js.org
 
Either click one of the demos (like Etoys or Scratch), or drag-and-drop your favorite image into the "launcher" page.
 
Recently I've been working on resurrecting "old" Croquet from 2005 – which included creating a proper FFI plugin to relay OpenGL calls, plus writing an OpenGL emulator mapping those functions to WebGL:
 
Try it: https://codefrau.github.io/jasmine/
Code: https://github.com/codefrau/jasmine
 
This is obviously work in progress, a lot of the rendering is not working yet, and I haven't even started on the networking emulation. But a lot is also working – like you can right-click in any of the teapot morphs to move around, and Tweak is alive too.
 
Contributions to both core SqueakJS and this Croquet project are very welcome! Or support some other projects based on SqueakJS, like Craig Latta's https://caffeine.js.org or Erik Stel's https://codeparadise.nl/ (using Pharo).
 
Happy holidays everyone!
Vanessa
 
image.png