Hello there!
We are happy to announce that voting is now open for a new GuestOS release.
The NNS proposal is here: IC NNS Proposal 138266.
Here is a summary of the changes since the last GuestOS release:
Release Notes for release-2025-08-28_03-17-base (84a268e93a909a6827d76ad794411b161c839a12
)
This release is based on changes since release-2025-08-21_03-19-base (f7b2fdb7deb1758622f9c8e282d09ab8813aac62
).
Please note that some commits may be excluded from this release if they’re not relevant, or not modifying the GuestOS image.
Additionally, descriptions of some changes might have been slightly modified to fit the release notes format.
To see a full list of commits added since last release, compare the revisions on GitHub.
Features:
cb4878c46
Consensus,Interface(canister_migration): introduce new endpoints with canister ranges in the new format (#6378)
950975052
Consensus,Interface: Introduce a way to order pre-signature stashes by their priority (lowest fill level) (#6464)
ae392697f
Consensus,Interface: Count the total number of available pre-signatures in the state and blockchain (#6446)
f2fdb3357
Consensus,Interface: introduce NNSDelegationReader
(#6172)
7f15a6b73
Interface: Add new helper to get BlessedReplicaVersions (#6463)
619546650
Interface(canister_migration): Add the nns delegation format to the execution_environment::QueryCache (#6461)
f398475d9
Interface(NRC): Store rewards distribution in stable mem. (#6302)
2651e30c2
Interface(ICP-Ledger): consent message for legacy transfer (#6357)
b83661c8e
Interface,Node: Improve SEV library (#6433)
Bugfixes:
c1597e18d
Consensus,Interface: Use cached block chain to create IDkgBlockReader
(#6287)
f92bb9435
Execution,Interface: replace outdated hard-coded constant by size_of::() (#6397)
f322cac90
Interface(Ledgers): verify fee when generating consent message (#6381)
bb7804bfe
Interface,Node(node): use deserialize_config to deserialize config object (#6437)
87fdc26af
Interface,Node: Use a more reliable way to check if SEV is active in the Guest (#6248)
373f0330e
Interface,Node(node): validate tar bootstrap contents (#6401)
Performance improvements:
f2956e833
Interface: Replace RoutingTable::route
by NetworkTopology::route
(#6361)
Chores:
4bd3bf6b4
Crypto: use LazyLock instead lazy_static in packages (#6358)
f6b4883f2
Crypto,Interface(crypto): use LazyLock instead lazy_static in rs/crypto (#6380)
37ce213ff
Execution,Interface: refactor SubnetAvailableMemory (#6447)
44b86128c
Execution,Interface: rename main_memory to wasm_memory in snapshot data API (#6420)
e8fc89aff
Execution,Interface: Remove wasm64 feature flag (#6354)
93aab1f15
Interface: disallow ic_cdk::futures::spawn & upgrade ic_cdk to 0.18.7 (#6373)
ef05fa225
Interface,Message Routing: improve checkpoint step duration metrics (#6017)
fa0885360
Interface,Node(node): convert generate-ic-config to rust (#6408)
6a5a56ecd
Interface,Node(node): deprecate logging field (#6377)
1f7767f0a
Interface,Node(node): rewrite bootstrap-ic-node.sh into rust config tool (#6324)
0728c0cdf
Node: Update Base Image Refs [2025-08-21-0805] (#6375)
Refactoring:
03ddbe5c1
Execution,Interface(XC): More consistent naming of native cross chain code (#6383)
ba0fd9bce
Node: reorganize ic-os components (#6402)
Full list of changes (including the ones that are not relevant to GuestOS) can be found on GitHub.
IC-OS Verification
To build and verify the IC-OS GuestOS disk image, after installing curl if necessary (sudo apt install curl
), run:
# From https://github.com/dfinity/ic#verifying-releases
curl -fsSL https://raw.githubusercontent.com/dfinity/ic/master/ci/tools/repro-check | python3 - -c 84a268e93a909a6827d76ad794411b161c839a12 --guestos
The two SHA256 sums printed above from a) the downloaded CDN image and b) the locally built image, must be identical, and must match the SHA256 from the payload of the NNS proposal.
While not required for this NNS proposal, as we are only electing a new GuestOS version here, you have the option to verify the build reproducibility of the HostOS by passing --hostos
to the script above instead of --guestos
, or the SetupOS by passing --setupos
.
Hello there!
We are happy to announce that voting is now open for a new HostOS release.
The NNS proposal is here: IC NNS Proposal 138267.
Here is a summary of the changes since the last HostOS release:
Release Notes for release-2025-08-28_03-17-base (84a268e93a909a6827d76ad794411b161c839a12)
This release is based on changes since release-2025-08-21_03-19-base (f7b2fdb7deb1758622f9c8e282d09ab8813aac62).
Please note that some commits may be excluded from this release if they’re not relevant, or not modifying the HostOS image. Additionally, descriptions of some changes might have been slightly modified to fit the release notes format.
To see a full list of commits added since last release, compare the revisions on GitHub.
Bugfixes:
bb7804bfe
Interface,Node(node): use deserialize_config to deserialize config object (#6437)
Chores:
Refactoring:
Tests:
Full list of changes (including the ones that are not relevant to HostOS) can be found on GitHub.
IC-OS Verification
To build and verify the IC-OS HostOS disk image, after installing curl if necessary (sudo apt install curl
), run:
# From https://github.com/dfinity/ic#verifying-releases
curl -fsSL https://raw.githubusercontent.com/dfinity/ic/master/ci/tools/repro-check | python3 - -c 84a268e93a909a6827d76ad794411b161c839a12 --hostos
The two SHA256 sums printed above from a) the downloaded CDN image and b) the locally built image, must be identical, and must match the SHA256 from the payload of the NNS proposal.
While not required for this NNS proposal, as we are only electing a new HostOS version here, you have the option to verify the build reproducibility of the GuestOS by passing --guestos
to the script above instead of --hostos
, or the SetupOS by passing --setupos
.
Hello there!
We are happy to announce that voting is now open for a new GuestOS release.
The NNS proposal is here: IC NNS Proposal 138268.
Here is a summary of the changes since the last GuestOS release:
This release is based on changes since release-2025-08-28_03-17-base (84a268e93a909a6827d76ad794411b161c839a12
).
Please note that some commits may be excluded from this release if they’re not relevant, or not modifying the GuestOS image.
Additionally, descriptions of some changes might have been slightly modified to fit the release notes format.
To see a full list of commits added since last release, compare the revisions on GitHub.
Other changes:
91732387a
Execution,Interface: enable snapshot upload/download
IC-OS Verification
To build and verify the IC-OS GuestOS disk image, after installing curl if necessary (sudo apt install curl
), run:
# From https://github.com/dfinity/ic#verifying-releases
curl -fsSL https://raw.githubusercontent.com/dfinity/ic/master/ci/tools/repro-check | python3 - -c 91732387a03c7c82bdaea6f78d7f8321cc8cb559 --guestos
The two SHA256 sums printed above from a) the downloaded CDN image and b) the locally built image, must be identical, and must match the SHA256 from the payload of the NNS proposal.
While not required for this NNS proposal, as we are only electing a new GuestOS version here, you have the option to verify the build reproducibility of the HostOS by passing --hostos
to the script above instead of --guestos
, or the SetupOS by passing --setupos
.
Proposal 138166, 138167 & 138168 - Hamish | CodeGov
Vote: Adopt
Reason: I have successfully run the build script and in my opinion all the commits listed look fine and match their descriptions.
Features:
-
cb4878c46
Consensus,Interface(canister_migration): introduce new endpoints with canister ranges in the new format (#6378)
Review: Looks fine + matches description
Notes: Includes new verions of the /read_state
, /call
and /query
endpoints which include the new canister_ranges
path within the returned NNS delegation, then also does some renaming and refactoring.
-
950975052
Consensus,Interface: Introduce a way to order pre-signature stashes by their priority (lowest fill level) (#6464)
Review: Looks fine + matches description
Notes: Introduces the PrioritizedStash
struct and implements ordering for them where the resulting values are ordered by their pre-signature count divided by the max size. In a subsequent commit this lightweight structs will be used to determine which stashes should be prioritised to be populated with more pre-signatures.
-
ae392697f
Consensus,Interface: Count the total number of available pre-signatures in the state and blockchain (#6446)
Review: Looks fine + matches description
Notes: Adds iter_above
to IDkgBlockReader
(which just forwards to ConsensusBlockChain::iter_above
in the implementation) and uses it to implement the new count_pre_signatures_total
which iterates over the state at each height to sum up the total number of pre-signatures available.
-
f2fdb3357
Consensus,Interface: introduce NNSDelegationReader
(#6172)
Review: Looks fine + matches description
Notes: Introduces the NNSDelegationReader
struct which exposes a get_delegation
method which takes a filter specifying how the canister ranges should be handled. This filter value is either Flat
(the old behaviour), Tree
(the new behaviour), or None
(which excludes the canister ranges altogether, as returned by the new /api/v3/subnet/read_state
endpoint).
-
7f15a6b73
Interface: Add new helper to get BlessedReplicaVersions (#6463)
Review: Looks fine + matches description
Notes: Introduces the BlessedReplicaVersionRegistry
with a single get_blessed_replica_versions
function, then implements it for all types that implement RegistryClient
. Internally this function simply reads the value out of the registry then handles the deserialization.
-
619546650
Interface(canister_migration): Add the nns delegation format to the execution_environment::QueryCache (#6461)
Review: Looks fine + matches description
Notes: Adds the new certificate_delegation_format
field to the EntryKey
struct which is used as the keys of the query cache. This is to ensure requests to the /api/v2/...
and /api/v3/...
query endpoints don’t share cache entries since the NNS delegation format differs between the 2 endpoints.
-
f398475d9
Interface(NRC): Store rewards distribution in stable mem. (#6302)
Review: Looks fine + matches description
Notes: Modifies the NodeRewards canister to store the log of historical node rewards and the daily subnet failure rates in stable memory, and also introduces the DayUtc
struct which ensures each timestamp always corresponds to the end of a day in UTC timezone.
-
2651e30c2
Interface(ICP-Ledger): consent message for legacy transfer (#6357)
Review: Looks fine + matches description
Notes: Updates the ICP ledger by adding the GenericTransfer
variant to the Icrc21Function
enum, then modifies the ConsentMessageBuilder
to take each address as an AccountOrId
rather than an (ICRC) Account
. This allows consent messages to be constructed for transfers to AccountIdentifiers (as opposed to ICRC transfers).
-
b83661c8e
Interface,Node: Improve SEV library (#6433)
Review: Looks fine + matches description
Notes: Replaces the SevKeyDeriver
struct (which took an owned copy of the sev_firmware
) with the simpler derive_key_from_sev_measurement
function (which instead takes a mutable reference to the sev_firmware
) then also adds a few tests.
Bugfixes:
-
c1597e18d
Consensus,Interface: Use cached block chain to create IDkgBlockReader
(#6287)
Review: Looks fine + matches description
Notes: Reduces the overhead of creating each IDkgBlockReaderImpl
by modifying ConsensusPool::build_block_chain
to read blocks from the cached finalized chain rather than adding blocks from the consensus pool which required deserializing each block. Also fixes a bug within get_parent_block
to grab the block from the catch-up package if needed.
-
f92bb9435
Execution,Interface: replace outdated hard-coded constant by size_of::() (#6397)
Review: Looks fine + matches description
Notes: Fixes the global_memory_usage
calculation to use size_of::<Global>()
rather than the constant (and incorrect) value of 8.
-
f322cac90
Interface(Ledgers): verify fee when generating consent message (#6381)
Review: Looks fine + matches description
Notes: Adds calls to icrc21_check_fee
within build_icrc21_consent_info
when constructing messages for the various transfer/approve functions.
-
bb7804bfe
Interface,Node(node): use deserialize_config to deserialize config object (#6437)
Review: Looks fine + matches description
Notes: Simplifies the code to read the SetupOS config by using config::deserialize_config
rather than explicitly loading the file then deserializing it using serde_json
.
-
87fdc26af
Interface,Node: Use a more reliable way to check if SEV is active in the Guest (#6248)
Review: Looks fine + matches description
Notes: Implements is_sev_active
which queries the CPU to check if SEV is active then uses it within GuestOS rather than relying on the config value passed in by HostOS.
-
373f0330e
Interface,Node(node): validate tar bootstrap contents (#6401)
Review: Looks fine + matches description
Notes: Implements validate_bootstrap_contents
and calls into it when validating a bootstrap tar file for GuestOS. Internally this function iterates over each entry in the tar bundle to verify that it contains only regular files and directories.
Performance improvements:
f2956e833
Interface: Replace RoutingTable::route
by NetworkTopology::route
(#6361)
Review: Looks fine + matches description
Notes: Previously the target subnet for each request would be found by calling RoutingTable::route
, this would first iterate over the map of canister ranges to try to find a matching principal in order to check if the request is to a subnetId. But with the upcoming canister migration feature the map of canister ranges can grow massively so this will become inefficient. So this change introduces NetworkTopology::route
which looks up if the request is to a subnet by doing a simple key lookup in a map.
Chores:
-
4bd3bf6b4
Crypto: use LazyLock instead lazy_static in packages (#6358)
Review: Looks fine + matches description
Notes: Replaces usages of lazy_static
from the lazy_static
crate with LazyLock
which solves the same problem and was added to the Rust standard library a year ago.
-
f6b4883f2
Crypto,Interface(crypto): use LazyLock instead lazy_static in rs/crypto (#6380)
Review: Looks fine + matches description
Notes: Same as f6b4883f2
but for a few more usages.
-
37ce213ff
Execution,Interface: refactor SubnetAvailableMemory (#6447)
Review: Looks fine + matches description
Notes: Renames SubnetAvailableMemory::new
(which internally sets a scaling factor of 1) to SubnetAvailableMemory::new_for_testing
, then adds a new constructor called new_scaled
to make it explicit that a scaling factor must be provided when creating SubnetAvailableMemory
instances. The scaling factor is based on the number of scheduler cores, so that each thread can allocate memory up to the scaled limit without it being possible for the max memory to be exceeded. Also renames subnet_memory_capacity
to full_subnet_memory_capacity
to make it clear that no scaling factor is being applied.
-
44b86128c
Execution,Interface: rename main_memory to wasm_memory in snapshot data API (#6420)
Review: Looks fine + matches description
Notes: Renames main_memory
/ MainMemory
to wasm_memory
/ WasmMemory
within the canister snapshots API for consistency and clarity.
-
e8fc89aff
Execution,Interface: Remove wasm64 feature flag (#6354)
Review: Looks fine + matches description
Notes: Removes the wasm64
feature flag since it is now enabled everywhere, then removes all the code which handled the case where it was set to false.
-
93aab1f15
Interface: disallow ic_cdk::futures::spawn & upgrade ic_cdk to 0.18.7 (#6373)
Review: Looks fine + matches description
Notes: Adds ic_cdk::futures::spawn
to the list of disallowed methods along with an explanation message since its behaviour differs between CDK version 0.17 and 0.18. This is to avoid developers being tripped up by the change is behaviour, but they can still make use of the new version if they explicitly disable the warning.
-
ef05fa225
Interface,Message Routing: improve checkpoint step duration metrics (#6017)
Review: Looks fine + matches description
Notes: Renames 2 labels within checkpointing metrics to be more precise (flush_page_map_deltas
→ flush_page_map_deltas_preprocessing
and tip_to_checkpoint
→ wait_for_tip_to_checkpoint
).
-
fa0885360
Interface,Node(node): convert generate-ic-config to rust (#6408)
Review: Looks fine + matches description
Notes: Implements the new generate_ic_config
function written in Rust which takes the GuestOS config and the config template and generates the IC config file and the TLS certificate if needed. Then makes this new function callable via the IC config tool.
-
6a5a56ecd
Interface,Node(node): deprecate logging field (#6377)
Review: Looks fine + matches description
Notes: Adds the serde(default)
attribute to ICOSSettings::logging
, this allows it to be safely removed in a future commit since older versions will still be able to deserialize config values which don’t contain the field by simply assigning a default value.
-
1f7767f0a
Interface,Node(node): rewrite bootstrap-ic-node.sh into rust config tool (#6324)
Review: Looks fine + matches description
Notes: Removes bootstrap-ic-node.sh
and moves its logic to the new process_bootstrap
Rust function within the IC config tool. Then updates bootstrap-ic-node.service
to use this new function via the IC config tool rather than the old script.
-
0728c0cdf
Node: Update Base Image Refs [2025-08-21-0805] (#6375)
Review: Looks fine + matches description
Notes: Updates the base IC-OS image references.
-
9b9a3cc6a
Node: guestos-recovery-upgrader.sh download retry logic (#6360)
Review: Looks fine + matches description
Notes: Modifies guestos-recovery-upgrader.sh
to support retrying the download_and_verify_upgrade
step, and by default allows up to 10 attempts.
Refactoring:
-
03ddbe5c1
Execution,Interface(XC): More consistent naming of native cross chain code (#6383)
Review: Looks fine + matches description
Notes: Renames a few Bitcoin related types now that the same code will support both Bitcoin and Dogecoin, eg. Network::Regtest
→ Network::BitcoinRegtest
.
-
ba0fd9bce
Node: reorganize ic-os components (#6402)
Review: Looks fine + matches description
Notes: Re-organises the /ic-os/components/
directory by moving many GuestOS related files into /ic-os/components/guestos/
, and similarly with HostOS and SetupOS files.
-
712475c22
Node: guestos-recovery-upgrader url construction (#6392)
Review: Looks fine + matches description
Notes: Moves the /ic/
path when constructing GuestOS upgrade urls into base_urls
for consistency.
Tests:
8b25560fb
Node: include dev-cert in dev hostos (#6389)
Review: Looks fine + matches description
Notes: Modifies the HostOS Dockerfile to include a dev certificate when it is run in dev mode.
About CodeGov
- reliable, credible, and sensible NNS governance
CodeGov has a team of developers who review and vote independently on the following proposal topics: IC-OS Version Election, Protocol Canister Management, Subnet Management, Node Admin, and Participant Management. The CodeGov NNS known neuron is configured to follow our reviewers on these technical topics. We also have a group of Followees who vote independently on the Governance and the SNS & Neuron's Fund topics. We strive to be a credible and reliable Followee option that votes on every proposal and every proposal topic in the NNS. We also support decentralization of SNS projects such as WaterNeuron, KongSwap, and Alice with a known neuron and credible Followees.
Learn more about CodeGov and its mission at codegov.org.