[VM] New VM Release

Hi all,

We wanted to share a new VM release, aimed at Pharo 14 images.

https://github.com/pharo-project/pharo-vm/releases/tag/v12.0.2-beta

Besides many cleanups and small improvements, this enables a soon-to-come stack overflow support.
For those interested in more details, I allowed myself to generate a digested changes log with some AI.

Those using zeroconf will see this change effective immediately.
Launcher users, do not forget to update your VMs.

Please consider this is a beta release.
Do not hesitate to communicate any issues you may find.

Cheers,
Guille Polito

Highlights

This is a major release featuring:

  • Frame unification and stack management improvements, delivering substantial interpreter and execution engine cleanups.
  • RISC-V JIT support, expanding platform coverage and future-proofing VM development.
  • New memory management capabilities, including direct old-space allocation and numerous GC and allocation improvements.
  • Extensive compiler and Slang/C translation work, with many correctness fixes, new tests, and improved inspection tools.
  • Platform and build modernization, including SDL updates, improved CI, cross-build support, and updated third-party dependencies.
  • Large-scale cleanup and refactoring efforts across the VM, interpreter, Cogit, PICs, and infrastructure.

VM Runtime, Interpreter & JIT

  • Frame unification (#602)
  • Improvements in stack management (#710)
  • Initialize stack pages during simulation (#853)
  • Robust cannotInterpret: in the interpreter (#641)
  • Simplify stack-to-register mapping API (#627)
  • Improve and use unreachable (#630)
  • Clean up Interpreter State (#658)
  • Void the instructionPointer systematically when creating a base frame (#914)
  • Cleanup make base frame when compacting code (#943)
  • Fix meta try primitive (#968)
  • Feature: thisProcess JIT (#1037)
  • OpenPIC / Megamorphic IC work (#1067)
  • PIC Cleanup (#889)
  • Cleanup PIC (#1021)
  • Allow Cogit>>#mnuMethodOrNilFor: to return non-CompiledMethod oops (#936)
  • Remove entry alignment (#934)
  • Mark debugging overrides in Cogit as #debuggerCompleteToSender (#1035)

Memory Management & Garbage Collection

  • Do not unlink all sends on GC (#503)
  • Improving perm space P12 (#621)
  • Added new primitive for allocating directly in the old space (#701)
  • Adding test to test Ephemerons in the Old Space (#702)
  • Clean special object array a little (#640)
  • Collapse allocation logs (#913)
  • Only scan the class table if become: was performed to an active class object (#1023)
  • Set the size of larger indexable objects allocated in young space (#976)
  • Fix LargeIntegers segfault on allocation failure (#1040)

Compiler, Slang & Code Generation

  • Reject reserved words (#613)
  • Rename reserved words: selectors, locals and instance variables (#624)
  • Rename conflicting identifiers (#646)
  • Validate if locals/args exist when adding a type declaration (#603)
  • Check structs' instance variable type declarations (#607)
  • Redundant type declaration linter rule (#662)
  • Fix cast tests (#660)
  • Fix and test inlinings with ifs and right shifts not translated (#667)
  • Add tests and fix incorrectly generated inlined C code from CCodeGenerator (#666)
  • C AST translation right-side parenthesis in expression (#685)
  • Add a palette with the C translation of any inspected C node (#686)
  • Add C source code inspection tab for TParseNode (#687)
  • Created new package CAST-Tests (#679)
  • Better dead code elimination (#915)
  • Fix issue #822: remove unused argument for functionPointerFor:inClass: (#956)
  • Fix CASTParserTests>>#testParseSizeofTypeInt (#965)
  • Refactor inlining code and add tests for it (#987)
  • Suppress the old inlining implementation (#1000)
  • Fix small bug related to method inlining and comments (#957)
  • Remove the idea that we might have a different bytecode set (#927)
  • Add a dumb isNotNil implementation (same as notNil) (#890)

Platform Support & Portability

  • RISC-V JIT Support (#932)
  • Initial work on W^X for Linux systems (#905)
  • Add Windows support for non-ASCII filenames in basicImageFileExists (#922)
  • Fix the Windows build (#938)
  • Windows improvements (#1062)
  • Make next non-blocking on Linux (#1065)
  • Support x86_64 musl cross-build smoke testing with QEMU (#1069)
  • Updating versions for OSX (ARM / Intel) (#937)

Build System, CI & Dependencies

  • Update SDL (#615)
  • Remove strange SDL2_copy CMake target (#620)
  • Forward VM build parameters from CMake (#654)
  • Use Pharo 11 on CI (#669)
  • Use Pharo file server @ Inria (#868)
  • Extract full semantic version from git (#870)
  • Remove old versions of libgit in new builds (#902)
  • Update CMake minimal version for recent CMake compatibility (#945)
  • Updating LibGit2 build to use new OpenSSL and libssh2 (#1033)
  • SDL2 2.32.6 update for Windows and macOS (#978)
  • Fix OBS build (#981)
  • Add FEATUREJITSIMD option (#966)
  • Fix Linux compilation error (#1053)

Plugins, I/O & Networking

  • New file plugin (#1024)
  • Fix missing socket accept on Pharo 12 (#1005)
  • Move warnings to debug when loading plugins (#675)

Testing & Simulation

  • Small stack interpreter tests (#690)
  • Simulator fixes (#1025)
  • Fix VM tests: specialObjectsArrayAddress (#1056)
  • Fix broken GC tests (#917)
  • Fix some Slang tests (#891)
  • Redo ML localization test fixes (#1064)

Bug Fixes

  • Resolved UUID primitive bug (#610)
  • Make instantiateClass more robust when format is missing (#629)
  • Revert #629 (#631)
  • Revert the revert and restore primitive failure handling (#634)
  • Add getClass for Pharo 12 compatibility (#651)
  • Fix warning absolute value (#782)
  • Fix load 32 bits (#920)
  • Fix headerAt:put: (#919)
  • Fix sign coercion warnings (#950)
  • Fix int boxing/loading (#1066)
  • VM version primitive (#1050)
  • Profile data extraction from PIC cache tags (#969)

Refactoring, Cleanup & Maintenance

  • Added comments and renamed methods during dojo (#623)
  • Fixing categorization P12 (#626)
  • Updating P12 with changes from P10 branch (#733)
  • Forward porting P10 → P12 (#851)
  • Forward port 10 → 12 (#893)
  • Forward port 10.3.3 → Pharo 12 (#903)
  • Realign P12 branch to P10 (#1057)
  • Removing duplicated code (#857)
  • Cleanups and improvements (#871)
  • Lots of cleanups (#874)
  • Cleaning (#881)
  • Cleanup dead code (#961)
  • Cleanup warnings (#906)
  • Fix warnings (#1034)
  • Remove debugging code (#911)
  • Remove unused variables (#930)
  • Normalize variable (#897)
  • Remove gcMode because getGCMode is used (#963)
  • Remove ceShortCutTraceStore: and simulation guard users (#960)
  • Simplify signal handler space calculation using POSIX SIGSTKSZ (#910)

Documentation & Developer Experience

  • README: Developer documentation is not a link (#637)
  • Update README (#878)
  • Add default values to --help parameters (#872)
  • Fix typos in comments (#958)

New Contributors

  • @Mathilde411
  • @LucFabresse
  • @ivojawer
  • @Gabriel-Darbord
  • @iglosiggio
  • @rolandbernard
  • @fouziray
  • @kilian-kier
  • @NathanMalenge
  • @FedeLoch
  • @Ducasse
  • @takano32
12 June 2026