v0.6.6 release
Unfortunately, this release does not yet include support for OTP-28. We recommend using a supported version such as OTP-27 for the best experience with AtomVM v0.6.6.
That said, if you're eager to experiment, our main development branch inc ludes support for OTP-28. We strive to keep up with the latest OTP changes, so adventurous users are welcome to try it out—with the usual caution that comes with using a development branch.
If you're on macOS, be aware that both Homebrew and MacPorts now default to OTP-28. To install an earlier version, you can use:
:::sh
brew install erlang@27
Alternatively, consider using asdf or mise to manage multiple Erlang/OTP versions with ease.
Please, read the getting started guide for flashing instructions.
Added
- Added the ability to run beams from the CLI for Generic Unix platform (it was already possible with nodejs and emscripten)
- Added preliminary support for ESP32P4 (no networking support yet).
- Added memory info in
out_of_memory
crash logs to help developers fix memory issues. - Added documentation and function specs for uart driver
- Added
uart:read/2
with a timeout parameter. - Missing
erlang:is_function/2
BIF - Added
erlang:is_record/2
- Added ability to set per-interface
dhcp_hostname
on Pico W if present in config.
Fixed
- Fixed specifications of nifs from
esp_adc
module - ESP32: fix
gpio:init/1
on GPIO >= 32 - Adding missing check, passing a non numeric argument to a function expecting a floating point might lead to a crash in certain situations.
- Fixed several bugs in
http_server
(#1366) - Fixed generic_unix
socket_driver
to return{gen_tcp, closed}
when socket is closed on Linux instead of{gen_tcp, {recv, 104}}
- Fixed a memory leak where modules were not properly destroyed when the global context is destroyd
- alisp: fix support to variables that are not binaries or integers.
- Fixed destruction of ssl-related resources
- Fixed corruption when dealing with specific situations that involve more than 16 x registers when certain VM instructions are used.
- Fixed ESP32 GPIO interrupt trigger
none
- Fixed an issue where a timeout would occur immediately in a race condition
- Fixed SPI close command
- Added missing lock on socket structure
- Fixed a race condition affecting multi-core MCUs where a timeout would not be properly cleared
- Fixed a double free when esp32 uart driver was closed, yielding an assert abort
- Fixed compilation with latest debian gcc-arm-none-eabi
- Fixed
network:stop/0
on ESP32 so the network can be started again - Fixed a memory corruption caused by
binary:split/2,3
- Fixed deadlock in socket code
- Fixed bug in opcode implementation (
select_val
): when selecting a value among many others a shallow comparison was performed, so it was working just for plain values such as atoms and small integers - Fixed support for setting esp32 boot_path in NVS.
- Fixed race conditions in network:start/stop.
- Fixed crash calling network:sta_rssi(), when network not up.
- Fixed error handling when calling
min
andmax
with code compiled before OTP-26: there was a bug when handling errors from BIFs used as NIFs (when called withCALL_EXT
and similar opcodes) - Fixed matching of binaries on unaligned boundaries for code compiled with older versions of OTP
- Added missing out of memory handling in binary_to_atom
- Fixed call to funs such as fun erlang:'not'/1, that make use of BIFs
- Fixed potential crashes or memory leaks caused by a mistake in calculation of reference counts and a race condition in otp_socket code
- Fixed an out of memory issue by forcing GC to copy data from message fragments
- Fixed a bug where calling repeatedly
process_info
on a stopped process could cause an out of memory error - Fixed possible concurrency problems in ESP32 UART driver
- Fixed concurrency and memory leak related to links and monitors
- Fixed issues with parsing of line references for stack traces
- Fixed memory corruption issue with
erlang:make_tuple/2
- Fix potential use after free with code generated from OTP <= 24
- Fix
is_function/2
guard - Fixed segfault when calling
lists:reverse/1
(#1600) - Fixed nif_atomvm_posix_read GC bug
- Fixed
erlang:is_number/1
function, now returns true also for floats - Fixed unlink protocol and add support for
link/1
on ports - Do not abort when an out of memory happens while loading a literal value
- Fixed potential memory corruption when handling integer immediates that are stored as boxed integer (this never happens with integers < 28 bits)
- Correctly set Pico-W unique dhcp hostname when using the default, previously all rp2040 devices used the same "PicoW" dhcp hostname, causing collisions when multiple rp2040 are on the same network. (See issue [#1094])
Changed
- ESP32 UART driver no longer aborts because of badargs in configuration, instead raising an error
- ESP32:
v0.6.6
uses esp-idf v5.4.1 for pre-built images andv5.4.x
is the suggested release also for custom builds