Fuchsia F25 release notes

Version: F25

The following changes have been implemented:

A11y

The following updates have been made for A11y:

  • Reverted the a11y focus action recovery, which was not announcing the node.

Audio

The following updates have been made for Audio:

  • Updated audio_device_registry to ensure that pre-existing devices are detected and initialized before responding to the initial WatchDevicesAdded call. ADR can now be demand-started rather than depending on always being eagerly started.
  • Converted the aml-g12-tdm driver to new GPIO calls.
  • Updated naming for Audio tests to be consistent. Use underscores for test package names, use hyphens for test component names, prefix both with audio.

Bluetooth

The following updates have been made for Bluetooth:

  • Finished migration to a new HCI transport FIDL protocol.
  • Fixed some Rust lints for Bluetooth, and updated syn to v.
  • Improved Bluetooth profiles and GAP, including routing updates and fixes for redundant cloning and heap allocation issues.
  • Added bt-init eager, starting it on device boot, and routed some additional Bluetooth capabilities to session for component use.
  • Implemented fuchsia.bluetooth.le.Connection/ConnectL2cap to support LE Connection-Oriented Channels.
  • Created the PrivilegedPeripheral protocol to support LE Advertisements with static address when privacy mode is enabled.
  • Finished migration of HCI command and event packet structs to Emboss packet views.

Cobalt

The following updates have been made for Cobalt:

  • Updated system metrics calculations to use the boot clock for increased accuracy and the system metrics daemon uses Fuchsia’s time concepts, reducing errors and preparing for future enhancements.
  • Modified validator test to use helper functions to improve readability.

Component Framework

The following updates have been made for Component Framework:

  • Updated the component CLI tool and the ffx tool have been updated. The component show command now displays runner information, the on-device component CLI now includes a config subcommand, and ffx's fuchsia-controller now uses a common SSH configuration. cmc format now supports reading from stdin.
  • Updated Component Manager to support tracing when running nested and have it expose the bootfs package resolver through the fuchsia.pkg.PackageResolver-boot capability.
  • Implemented the fuchsia.sys2.ConfigOverride protocol in Component Manager, along with a supporting CLI library. This allows developers to override structured configuration values, and fixes issues where fields not using a configuration capability were rejected.
  • Cleaned up the fuchsia-component library by cleaning unused service connection APIs and removed a deprecated function, along with adding a clarification of service instance names in the outgoing directory. Additionally, component::Clone was migrated to fuchsia.unknown/Cloneable.

Connectivity Drivers

The following updates have been made for Connectivity Drivers:

  • Enhanced the brcmfmac driver, including the use of new GPIO calls and reduced log level for non-fatal errors, improving compatibility, functionality, and log clarity.

Diagnostics

The following updates have been made for Diagnostics:

  • Improved the developer experience of ffx inspect. ffx inspect now supports --name, fuzzy matching of monikers and URLs, and improved the usage of --component supersedes and --manifest.
  • Improved the developer experience of ffx log. Prints boot time in addition to UTC time in the first line to enable computing back clock time from boot times, removed --select and --force-select, updated log interest selectors to no longer require any sort of escaping in monikers, and fixed interest interest on reconnection
  • Improved performance of Rust log encoding/decoding. Improvements of being around 60% faster in many benchmarks.
  • Updated additional items related to moving from monotonic time to boot time.
  • Added power broker stats in sampler
  • Introduced a new LogStream protocol in Archivist to fetch original FXT records directly, with attribution. This improves performance compared to using ArchiveAccessor.
  • Updated the SelfProfilesReport to support custom leaf rollups for analyzing CPU usage within complex CUJs.
  • Enhanced job filtering for debugging. FIDL clients can now use job-only filters, and a --job-only flag was added to the attach command for direct job attachment (Fuchsia only).
  • Improved the kernel thread sampler and debugger to be more robust. The sampler now supports attaching to initializing threads, and the debugger fixed a crash related to line tables and improved handling of asynchronous process termination.
  • Improved performance and stability in Archivist. A dedicated thread for log sockets reduced overhead, and changes to shutdown logic and internal buffers enhanced stability, adoption of async Scopes.
  • Improved diagnostics logs and symbolization. Added more debug logs to symbolizer and download manager, and fixed a symbolization issue related to negative loads in x64 Zircon.
  • Improved the severity API in diagnostics log, enhancing developer experience.

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:

GPU

The following updates have been made for GPU:

  • Improved Vulkan swapchain functionality: This includes simplifying swapchain present logic by using the unsquashable flag, removing explicit timestamps, and renaming fences to fence_signalers; changing fence-signaling to observe vsyncs; migrating the Flatland swapchain from HLCPP; and fixing fake Flatland's fuchsia.ui.composition.Allocator.RegisterBufferCollection implementation.
  • Improved virtio-gpu-display: Removed unused reference to sysmem1, used DriverLayer and ConfigStamp, and simplified the Banjo adapter API.
  • Migrated to open3 fdio: Includes changes related to fdio_open migration and general open to open3 migration.
  • Added functions to msd_c.h: Includes adding buffer import/release, connection create/release, and map/release buffer functions.

I18n

The following updates have been made for I18n:

  • Improved the ICU build process and configuration handling. Removed the jiri hook in favor of direct generator script calls during gn gen, improving efficiency and icu_root accuracy. Introduced build/icu/jiri_generated/config.json, managed by a Jiri hook, to optimize reading icu_config_info and added a validation target for data integrity.

IOT

The following updates have been made for IOT:

  • Fixed bugs for GHP.

Platform Drivers

The following updates have been made for Platform Drivers:

  • Improved AML CPU driver logging and transitioned the imx227 driver to use SetBufferMode().
  • Modernized the aml-light driver by migrating it to the //sdk/lib/driver/platform-device/cpp SDK library and refactoring its build targets.
  • Removed the limitation on suspend duration, enabling arbitrarily long suspend periods.
  • Made several improvements to the SPMI (System Power Management Interface) framework. These include updates to mock-spmi for asynchronous testing, enabling read/write access from UnownedClientEnd, and adding support for SpmiRegisterArray. Additionally, support for GetProperties and WatchControllerWriteCommands has been implemented.
  • Added a new method that allows SPMI driver clients to receive controller write commands from devices, completing the soft transition for SPMI. This removes a temporary build file.

Power Management

The following updates have been made for Power Management:

  • Improved observability and measurements. Includes dropping invalid Gonk samples from trace files; use of wall-time in Inspect data; and Cobalt metrics for Power Broker.
  • Improved platform power management. Includes running shutdown-shim as a built-in component by Component Manager; elimination of a potential memory leak in Power Broker; and removal of the Wake Handling and Full Wake Handling power elements.
  • Continuing development of CPU power management. Includes an energy model for VIM3 and platform support for configuring the kernel with an energy model.

Rust

The following updates have been made for Rust:

  • Improved code quality and linting. Addressed handling of or_fun_call and set_contains_or_insert lints, removed dead code detected by the new toolchain, and enabled clippy::redundant_clone, clippy::needless_collect, clippy::collection_is_never_read, and clippy::clear_with_drain.
  • Optimized log record decoding. Migrated from nom to zerocopy for improved performance and simpler code.
  • Migrated from async-io to Tokio. Timers are lazily initialized to workaround Tokio's host/target executor differences.
  • Added Open3 support for RemoteLike.

SDK

The following updates have been made for SDK:

  • Enhanced driver development with new FIDL metadata functions and support for span<const T> in the driver library, improving flexibility and reducing boilerplate.
  • Expanded partner SDK capabilities with the addition of gen-android-starnix-container host tool, fuchsia.system.state, and fake-platform-device for improved out-of-tree development.
  • Improved io2 compatibility in the sys library through migration to Node.Clone2 and use of Open3 for service connections in tests, addressing permission issues.
  • Added support for const ToFidlInputReport() in input_report_reader and interrupt acknowledgement in the Rust SDK, enhancing functionality and consistency.
  • Modernized the VFS library with LLCPP FIDL bindings, type-safe io2 replacements, and removal of deprecated functions, streamlining the API and enhancing safety.
  • Improved build system by fixing sdk_source_set() behavior, handling of POSIX flags in fdio, and resolving issues with fx build --fint-params-path.
  • Removed deprecated fserve, fpublish, and pm commands, as well as time-related library exceptions for FIDL versioning, cleaning up the SDK.

Software Delivery

The following updates have been made for Software Delivery:

  • Added FindDynamicDataSink API to replace UseBlockDevice, shifting block device lookup responsibility to the paver service. Added AndroidPartitionerTest and Vim3DevicePartitionerTest to improve reliability and handle edge cases like multiple GPT devices and prevent accidental bootloader wipes.
  • Added unbootable reason data to the FIDL API for improved error reporting and diagnostics.
  • Fixed assert in ResetPartitionTables occurring during GetMetadata calls, improving paver stability. Correctly reports last-boot-attempt, fixing unexpected behavior with unbootable slots. Added support for Sorrel.
  • Refactored tests for storage-host compatibility and simplification. Removed AbrClientFactory to streamline client creation. Deduplicated GUID lookup tables. ResetPartitionTables now replaces functions depending on direct GPT access. Added unit testing for KolaAbrClient.
  • Exposed fuzz_percentage_range over inspect. Comment edited to reflect paver's reporting of pending status on final boot attempt.
  • Migrated from Node.Clone to Node.Clone2 for io2 migration. Updated fuchsia_fs functions. Used open3 fdio. Sorted appended manifest and manifest list for determinism.
  • Refactored PolicyEngine and migrated to QueryConfigurationStatusAndBootAttempts to report boot attempts on successful commits.

Starnix

The following updates have been made for Starnix:

  • Implemented fscrypt ioctls, added support for encryption keys managed by users. However, operations on locked encrypted directories are not fully supported yet, and FS_IOC_REMOVE_ENCRYPTION_KEY does not correctly handle locking.
  • Enhanced SELinux to improve security and access control. This includes a basic implementation for reporting access vector cache statistics through /sys/fs/selinux/avc/cache_stats and category set normalization for security contexts.
  • Improved support for cBPF and eBPF. Several cBPF compatibility issues are fixed, including implementing the BPF_MSH instruction and adjusting packet access instructions. The eBPF verifier is enhanced to improve struct handling and prevent array bounds check bypasses.
  • Updated the cgroup and cgroup2 filesystems, and cpuset as a CgroupV1 filesystem, to be mountable. The cgroup.controllers interface file is also made accessible.
  • Re-enabled Starnix suspend functionality is re-enabled. Wake locks are tracked in the kernel, and container suspension is delegated to the runner, which monitors registered channels to resume the container. Related fixes address lease acquisition ordering and improve robustness of runner proxies.
  • Added support for aarch32 uapi. A corresponding build argument is also included.
  • Fixed the FIONBIO ioctl and capabilities calculation during execve. FIONBIO correctly handles the NONBLOCK flag based on user input, and capabilities for set-user-ID root programs are correctly calculated during execve. However, file capabilities and SECBIT_NOROOT are not yet addressed for the latter.

Testing

The following updates have been made for Testing:

  • Improved test infrastructure in multiple areas:
    • Introduced testing support within a bringup/bootstrap environment, enabling bootfs tests to run as components.
    • Enabled crosvm testing on arm64 and added it to the official kernel test environments.
    • Ensured CTF artifacts are copied to the correct location, resolving issues with loading them from releases.
    • Added support for provisioning keys over serial for Kola in botanist.
  • Added a new API to compress debug data, significantly speeding up coverage bots using ffx. The old uncompressed API is deprecated.
  • Improved various tests:
    • Fixed a flake in the Timer.Restart core test by extending the timer deadline.
    • Updated the shutdown test in msd-arm-mali to log more errors, aiding in debugging flakes.
    • Removed a race condition in the FailEarlyWake pager test, preventing indefinite blocking.
    • Fixed a rare flake in a core fifo test by ensuring padding pages around VMO mappings.
    • Replaced the 1-second timeout in msd-arm-mali tests with an infinite timeout, potentially resolving a flake.
  • Improved paver tests for robustness and compatibility:
    • Updated paver tests for storage-host compatibility by using pre-initialized block devices.
    • Added a regression test, AndroidPartitionerTest, to ensure correct GPT identification on Android devices.
  • Updated test tools and metrics processing:
    • Updated core tests to support both old and new kernel attribution models.
    • Removed a deprecated parameter from ConstantMetricsProcessor.
    • Required a filename when using ConstantMetricsProcessor for freeform metrics.
    • Enhanced CTF tests to utilize new C++ FIDL bindings.

Tools

The following updates have been made for Tools:

  • Updated the tunneling and ninjalog tools: tunneling now has improved error messages with diagnostic suggestions and ninjalog now supports Ninja log format v7.
  • Added support in the temperature-cli tool for getting, setting, and waiting on temperature trip points.
  • Updated make-fuchsia-vol to use product bundles as the primary source for image files, preferring sparse images.
  • Enhanced paver: Added AndroidPartitionerTest and Vim3DevicePartitionerTest. Fixed GetMetadata error on unsupported block devices. Improved storage-host compatibility in tests. Added unbootable_reason to FIDL API. Correctly reports last-boot-attempt and addressed a flaky test.
  • Migrated package_manager_test to use foreground repo server and fixed a flaky test.
  • Reverted a change copying blobs from the transfer manifest due to issues.
  • Improved test_list_tool to correctly handle file-relative blobs in package manifests.

ffx

The following updates have been made for ffx:

  • Updated ffx to retry target add on any non-fatal ssh error.

fx

The following updates have been made for fx:

  • Added support for a product bundle argument to fx create-pb-zip.
  • Improved the fx command with automatic fx gen invocation after forced clean, and added a new command fx rbe cleanlogs to remove logs from fuchsia-reproxy-wrap.sh.
  • Introduced fx generator for synchronizing BUILD.bazel and BUILD.gn files in dual-build targets.

UI

The following updates have been made for UI:

  • Added a new config, fuchsia.ui.VisualDebuggingLevel, allows developers to control debug features, including scenic tint, Starnix purple screen, and driver green screen for display off. The ui_visual_debugging_level now uses availability transitional routing, removing the need for routing in Starnix-related tests.
  • Added a test to Starnix to verify that touch events are dropped when the device is not opened. The starnix-touch-test was refactored to reuse GetTouchEventSequenceOfLen. This simplifies multi-reader and close testing.
  • Added a screensaver component, hidden behind a flag, that showcases Fuchsia Offload.
  • Added RGBA support to screenshots.
  • Improved Scenic config logging and configuration handling: Updated scenic config logs to be displayed in a single line, renamed ChoosePreferredPixelFormat() to ChosePreferredRenderTargetFormat(), and removed the unused DisplayManager::SetVsyncCallback() method.
  • Disabled display composition for CPU renderer tests.
  • Temporarily disabled direct-to-display, and removed related code relying on events; display test now uses vsync instead of signal events.

WLAN

The following updates have been made for WLAN: