# Copyright 2025 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

- workstream: >
    Enable profile-guided optimization (PGO), which is a compiler optimization
    technique that uses profiles of runtime behavior of a program to guide the
    compiler's optimizations to achieve better runtime performance in Fuchsia.
  area: Platform Evolution
  category: [Platform Evolution]

- workstream: >
    32 bit syscall support in Starnix
    <a href="/docs/contribute/governance/rfcs/0264_running_unmodified_aarch32_linux_programs_on_fuchsia.md">RFC</a>
    <br><br>
    Starnix now supports both 32bit and 64bit usermode programs.
  area: Platform Evolution
  category: [Platform Evolution]

- workstream: |
    One big VMO.
    <br><br>
    Starnix now requests a single Virtual Memory Object (VMO) from the Zircon
    kernel, and uses that VMO to fulfil memory requests from client applications,
    reducing the overhead of having the Zircon manage each memory request from
    client applications running in Starnix.
  area: Platform Evolution
  category: [Platform Evolution]

- workstream: >
    System Activity Governor
    <a href="/docs/contribute/governance/rfcs/0255_system_activity_governor.md">RFC</a>
    <br><br>
    System Activity Governor manages system suspend states for Fuchsia power
    management.
  area: Platform Evolution
  category: [Platform Evolution]