Fuchsia F24 release notes

Date: January 21, 2025

Version: F24

The following changes have been implemented:

A11y

  • Improved accessibility: Log changes in screen-reader state.

Audio

  • Updated audio_listener to fix usage-validation bugs and address clang-tidy issues.
  • Updated audio_device_registry service to add Inspect logging of power state changes.
  • Updated aml-g12-tdm driver to power-down audio hardware by default until the first client.

Bluetooth

The following updates have been made for Bluetooth:

  • Added bt-device-id software assembly config, and implemented a default device configuration implemented. The bt-device-id profile is not enabled by default.
  • Enhanced bt-rfcomm to use L2CAP max_packet_size for RFCOMM session channels, optimizing data transfer. A generic UUID was also added to BR/EDR service search parameters, enabling custom UUID searches.
  • Enhanced bluetooth LE Peer with additional fields for broadcast assistant. Simultaneous LE and BR/EDR advertising is now enabled based on controller support. Made several improvements to bt-gatt, including adding basic ServerSupportedFeatures support, removing unnecessary handle tracking, and turning on the ISO Host bit if supported. Also, AD types CSIS and PBP were added for LE Audio.
  • Migrated bt-host and bt-hci-virtual to prebuilts, and deleted source code. The bt-host prebuilt status is documented in README.
  • Added BT MAP MCE profile to product assembly (disabled by default), and implemented related features. This includes a command line tool for MAP-MCE, implementing the MAP MCE role using the Notification Service, and implementing the Message Notification Service server for the MCE role.
  • Updated bt-hfp with start/stop on request functionality, assembly config for audio gateway, and consolidated optional protocols. ERROR logs are now allowed for bt-avrcp-integration-tests. The LEAdvertisingSetTerminated event was migrated to Emboss, and typos in bt-host/fidl were fixed. An option to disable the timer duration check was added to Lacewing suspend-resume tests, the HCI emulator device node was removed, and the stale Bluetooth sampler config was deleted. Test groups were defined for starnix.arm64, and LE_AUDIO was added to CoD service bits in bt-cli. PrivilegedPeripheral API was added for LE Advertising.

Cobalt

The following updates have been made for Cobalt:

  • Improved event code handling and fixed linter warnings fixed. max_event_code and event_code limited to 2^31 - 1 to prevent exceeding Java int capacity, and linter warnings addressed in cobaltb.py.
  • Added build-test command to cobaltb.py.
  • Leveraged FatLTO for faster test builds.
  • Restored and tested current channel retrieval logic.
  • Updated prober test specs to Nelson.
  • Removed ARCH/OS from Fuchsia report profiles.
  • Fixed cobalt-registry erratum.

Component Framework

The following updates have been made for Component Framework:

  • Added a generic service broker and created a more extensible framework for builtin components in component_manager. The framework includes a new BuiltinProgram type, ABI alignment for builtin and non-builtin components, and refactoring of elf_runner.
  • Improved component manager stability and addressed test flakiness. This includes increasing timeouts in tests, replacing deprecated fuchsia_fs calls, and fixing a typo in error logging.
  • Improved logging and event handling. Newlines in klog messages are now split into separate entries, fixing a UTF8 panic bug. Boot time is now set in event headers for more accurate event timing.
  • Made the last required #ui route optional in session_manager, enabling UI-less products, and added fuchsia.ui.composition.
  • Leveraged FatLTO for faster test builds.

Diagnostics

The following updates have been made for Diagnostics:

  • Improved log message handling. Removed double parsing of incoming structured messages and standardized message representation for improved efficiency and reduced allocations. Removed ANSI color codes from log key-value pairs.
  • Migrated to boot time out of monotonic time. Archivist, inspect and log tools are using boot time instead of monotonic time.
  • Simplified configuration. Moved archivist-related bootstrap.cml entries to a shard for easier modification.
  • Added the C++ opinionated logger in the SDK. This allows enabling logging from components in the SDK without custom logger integrations.
  • Updated sampler config to accept wildcards. This enables writing selectors for drivers and others.
  • Updated the ffx log tool to accept --set-severity instead of --select
  • Handle initial interests from configuration. Pipes assembly options to configure the initial log severity of components.
  • Improved job handling. Introduced the DebuggedJob abstraction and used it for RootJob, simplifying job attachments and exception monitoring. Moved exception record retrieval to the Exception object for better consistency.
  • Added integer format setting. Allows persistent formatting of integers in print and locals commands.
  • Improved step_plt test. Removed unnecessary dependencies in the step_plt e2e test.
  • Improved profiling support. Added test-invoker support and updated inspect selectors for Mali for better profiling capabilities.
  • Updated timestamp format. Changed timestamp to boot timestamp as defined in RFC-0260.
  • Simplified configuration and improved time handling. Removed eng-only config data targets and low_memory config, and replaced direct calls to zx_clock_get_monotonic with higher-level abstractions.
  • Improved debugging. Prints UTC time in ffx log when connected to a device to enable mapping boot times to any time.
  • Improved reboot detection in ffx log. Uses a random per-boot integer instead of UTC for more reliable reboot detection.

Display

The following updates have been made for Display:

  • The display driver stack is being migrated to modern Fuchsia Platform infrastructure, such as DFv2 and FIDL.

Driver Framework

The following updates have been made for Driver Framework:

FIDL

The following updates have been made for FIDL:

  • Improved handling of boot instants, time types, and asynchronous receives in C++ and Rust FIDL bindings. This includes type-safe support for monotonic and boot instants using zx::basic_time and fuchsia_zircon types, added conversion traits for zx::basic_time in C++ bindings, support for encoding and decoding {Boot,Monotonic}Instant and zx::basic_time in Rust and C++ FIDL bindings, support for ticks in Rust bindings, and an increased buffer size for asynchronous receive in Rust FIDL.
  • Enhanced FIDL tooling and build processes. Several improvements were made including renaming MaybeAlias to MaybeFromAlias in fidlgen, switching fidlgen and fidldoc to use kind_v2, updating fidldoc to render vectors and arrays recursively, adding a boolean in the FIDL build for vendor HLCPP visibility, renaming the new Rust FIDL bindings library to fidl_next, decoupling resources from the core FIDL Rust library, minimizing not_needed() statements and removing passing of the SDK category to fidl_cpp_family() in GN build, requiring the "stable" parameter in fidl_library(), and adding missing tests to the FIDL bundle. Also addressed several bugs related to FIDL GN templates and versioning.
  • Added new Rust FIDL bindings (fidl_next).
  • Added SynchronousProxy::is_closed to zx Rust FIDL bindings.
  • Renamed fuchsia.device.manager FIDL to fuchsia.system.state.

GPU

The following updates have been made for GPU:

  • Updated MSD ARM Mali power test to use fake-suspend for compatibility.
  • Enabled Lavapipe in infra, and memory leaks fixed. Fixed several memory leaks in Lavapipe (including lvp_device) have been fixed.
  • Added PowerElementProvider support to MSD ARM Mali, and added clock handling APIs to Magma. Clients can now set clock speed limits. Added a FIDL protocol for retrieving power elements from a Magma driver.

I18n

The following updates have been made for I18n:

  • Added versioning to generated string FIDL libraries to ensure compatibility with FIDL platform versioning requirements. Also updated the intl properties provider to no longer emit changes equal to its default value. These changes simplify testing and assume all string libraries are unstable.

IOT

The following updates have been made for IOT:

  • Matter:
    • Fixed bugs and improved the stability for GHP.
    • Enabled inspect support for MDNS and added metrics.
    • Fixed MDNS bugs.

Kernel

The following updates have been made for Kernel:

  • Introduced the boot timeline. Added support for ZX_CLOCK_BOOT to specify that a timer should be based on the boot clock, which does not pause when the system suspends.
  • Enhanced root job profiling. Added and relanded a --system-wide flag to ffx profiler attach for more robust profiling of all threads in the root job tree, including handling cases where profiled processes exit mid-session. The profiler now returns samples even if symbols are unavailable.

Platform Drivers

The following updates have been made for Platform Drivers:

  • Improved platform device metadata handling and added board definitions. Platform devices now use strings for metadata instead of integers, and a new FIDL method retrieves metadata by string. Added Lilac and Iris board definitions.
  • Enhanced sdmmc driver stability and power management. Fixed a spinning worker loop by resetting the worker event. Temporarily disabled power suspension and hardware power state manipulation to facilitate the transition to a new power leasing model and allow storage requests even when power elements are down. Registered a token with the System Activity Governor for core sdmmc power element dependency.

Power Management

The following updates have been made for Power Management:

  • Enhanced the System Activity Governor (SAG) with new features and configuration options. Implemented the CpuElementManager server, allowing storage drivers to integrate with the power topology graph. Added th wait_for_suspending_token config flag to control SAG's dependency token handling and provide more flexibility in managing system power states.
  • Improved power observability with enhanced tracing and inspect capabilities. Added power element trace events to capture lease requests, level transitions in the power broker, and client-side Daemon interactions. Increased the inspect history buffer size to 8192 events and the VMO to 2MB, mitigating data loss after numerous power events.
  • Added an enum for power sensors to fuchsia.sensors.types. This introduces a POWER enum to SensorTypes, enabling integration with the Fuchsia Sensor Framework.
  • Migrated the fake-battery driver to the platform AIB and added it to the x64 platform.

Rust

The following updates have been made for Rust:

  • Added several updates for time and duration handling: Update to use MonotonicDuration instead of Duration in zx Rust, alias Duration as MonotonicDuration in Zircon Rust, renamed Time to Instant, renamed SyntheticTime to SyntheticInstant, renamed BootTime to BootInstant, renamed MonotonicTime to MonotonicInstant, and rename Boot/MonotonicTime to Instant in fuchsia_zircon Rust.
  • Improved FIDL Rust: Added support for ticks and encoding and decoding for {Boot,Monotonic}Instant, renamed new bindings lib to fidl_next, decouple resources from core library, and slightly improve initialization of thread-local buffers.
  • Added support for lsan in tests that use #[fuchsia::test], including disabling lsan for #[should_panic] tests.
  • Use dynamic linking in bootfs for Rust binaries.
  • Added .rustdoc subtarget for all Rust target types (except dylib + cdylib).
  • Added support for rustc_cdylib loadable_module.

SDK

The following updates have been made for SDK:

  • Improved Bazel action performance and fixed several bugs. This includes using genquery to optimize depfile generation (saving ~0.5-1s), combining cquery invocations (saving 1.2-1.5s), fixing relative paths for fuchsia_product_configuration, addressing a minfo fuchsia_board_configuration() bug, fixing Bazel assembly image verification, and fixing open fonts targets.

Software Delivery

The following updates have been made for Software Delivery:

  • Enhanced support for upgradable packages. This includes adding garbage collection protection, allowing base-resolver to resolve them alongside base packages, and introducing the SetUpgradableUrls API for updates (implementation gated behind a flag).
  • Improved consistency by clearing variant information when loading cache packages.
  • Improved bootpkg utility and reduced binary size. This includes removing async operations, shrinking the binary size, and adding a CLI tool to view boot packages and their contents (list and show subcommands).
  • Improved package management code and clarified OTA progress reporting. This includes refactoring the package server instance to use RepositorySpec, removing duplicated enum definitions for better maintainability, and adding a note to CLI OTA tools about progress reporting behavior.
  • Added features to the vim3 board for xHCI driver migration from BIB to AIB.

Starnix

The following updates have been made for Starnix:

  • Added support in Starnix for suspending and resuming containers, including tracking Linux wake locks, delegating operations to the Starnix runner, and acquiring/releasing wake leases.
  • Added support for touch and button events, as well as EPOLLWAKEUP, to wake a suspended container. Epoll wake locks are correctly deleted when the epoll instance is deleted.
  • Fixed race conditions related to timer management and signal clearing during suspend/resume.
  • Updated the hrtimer to use a proxied channel for waking the container.
  • Added support for the CLONE_NEWUTS flag and FUSE BPF program loading.
  • Added a new Unix Domain Socket implementation, based on the binder.fidl protocol, which enables inter-process communication and file descriptor passing between Fuchsia and Linux programs within Starnix.
  • Implemented io_uring_setup and basic read/write operations for io_uring, enabling the io_uring01 test to pass.
  • Implemented stubs for missing futex commands.
  • Added the /proc/sys/kernel/cap_last_cap file.
  • Fixed access checks for security attributes, and resolved an issue with BPF filesystem security labels not being set correctly is resolved.
  • Updated the accept queue size in sockets to be limited.
  • Updated implementation for the SELinux status file correctly handles seek behavior and end-of-file indication for specific files.
  • Fixed chown validation logic.

Testing

The following updates have been made for Testing:

  • Improved the fxtest tool, including support for variables like $FUCHSIA_OUT in the output directory path (matching the behavior of the old fx test), printing failed tests after execution, and addressing partial output issues in replays. A new --timestamp-artifacts flag prevents clobbering of previous test outputs.
  • Introduced honeydew_config in python_mobly_test to consolidate Honeydew configuration information, simplifying the process of adding new configurations.
  • Added support for ssh_keepalive_timeout FFX configuration in Lacewing tests.
  • Improved profile merging. Flattened profile counter merging on the target, enabling merging in binary profile correlation mode.
  • Fixed an alignment issue in libconcurrent's WellDefinedCopy helpers that could cause random test failures.

Timekeeping

The following updates have been made for Timekeeping:

Tools

The following updates have been made for Tools:

  • Added support for adding a vsock device to the emulator and added limited crosvm engine backend support with serial console and basic boot functionality.
  • Introduced crosvm target for running tests in automation and factored out a common emulator target for code sharing.

ffx

The following updates have been made for ffx:

  • Added ffx package archive edit command to rename packages.
  • Improved ffx component route to include runners.
  • Improved output and error handling in ffx target commands, including fixes for IPv6 formatting, machine output of target echo, default target test issues, and daemonless reconnect.
  • Improved the stand-alone functionality of ffx repository server:
    • Updated to use correct repository name with product bundles.
    • Added validation for having a target device.
    • Fixed product-bundle server registration.
    • Updated ffx repository server commands to be idempotent.
    • Added --product--bundle option for ffx repository server stop.
    • Changes: fxr/1125912, fxr/1133672, fxr/1128280, fxr/1129857
  • Removed level options from ffx config set.
  • Added support for adding a vsock device to ffx emu start.
  • Updated ffx target repository commands to be idempotent.
  • Updated ffx target repository list list on-device configuration.
  • Updated ffx target repository deregister to update the on-device configuration.
  • Added --all to ffx repository remove.
  • Corrected repo name usage with product bundles in ffx target register.

fx

The following updates have been made for fx:

  • Added fx build-profile command to conditionally collect system profiling data during builds.

UI

The following updates have been made for UI:

  • Introduced screensaver protocol for the default window manager.
  • Enabled versioning for fuchsia.input.* and fuchsia.ui.* FIDL libraries. Corrected previous incorrect @available annotations.
  • Improved input handling: Passed device ID from input pipeline to UI clients and implemented device ID in input helper with accompanying CTF tests.
  • Improved UI testing: Used logging_event_loop in test base classes for improved timeout debugging, and updated the virtual keyboard test to use the new C++ FIDL binding. Added a finite timeout and logs to the wait signal in starnix-touch-test.

WLAN

The following updates have been made for WLAN:

  • Improved WLAN client and AP operation reliability by adding timeouts to lower-layer operations. This addresses hangs in lower layers by adding timeouts and recovery steps based on the timeouts, enhancing overall stability.
  • Fixed unit test dependencies on fuchsia-async ordering.
  • Refactored buffer handling and improved encoding. Refactored the buffer and BufferStrategy implementations, integrated DeltaZigzagSimple8bRleRingBuffer and DeltaSimple8bRleRingBuffer, and added support for uncompressed buffers. Default encoding for u64 is now Simple8bRle.
  • Implemented event reactor combinators and enhanced TimeMatrix handling. Implemented event reactor combinators and added MockTimeMatrix for testing. Fixed issues with skipped interval calculations, Tick::start_has_sample bugs, and unnecessary TimeMatrix server future terminations. Output TimeMatrix as a data spec for better tooling.