Fact-checked by Grok 2 weeks ago

Project Verona

Project Verona is a research programming language initiated by Microsoft Research in collaboration with Imperial College London and Uppsala University, focused on enabling safe, scalable memory management and compartmentalization for concurrent object-oriented programs in cloud infrastructure. The project addresses critical vulnerabilities in existing systems by designing a concurrency model that supports concurrent ownership—allowing multiple execution contexts to share ownership of data structures without permitting concurrent mutation, thereby preventing data races and ensuring memory safety without traditional locks or garbage collection overhead. Verona organizes all program objects into a forest of isolated regions, where memory is managed through linear types and reference capabilities enforced at the language level, enabling efficient sharing within regions while isolating them from external interference. This approach draws inspiration from ownership models in languages like and reference capabilities in , but starts from a clean slate to explore unrestricted innovations in type systems, compilers, and runtime semantics. As an open-source project released under the , Verona's prototype implementation is hosted on , with its runtime built in C++ for low-level integration and compatibility with foreign code. The project remains in active research, emphasizing academic collaboration and peer-reviewed publications on topics such as dynamic region ownership and behaviour-oriented concurrency, without plans for immediate productization.

Overview and History

Project Goals and Motivation

Project Verona is an experimental programming language developed by aimed at enabling safe concurrent programming for infrastructure without relying on garbage collection or . The project seeks to address longstanding security challenges in cloud-scale systems by providing a robust alternative to traditional systems languages. The primary motivation stems from the prevalence of memory safety vulnerabilities in legacy C and C++ codebases that underpin 's infrastructure, including operating systems and networking components. These issues, such as use-after-free errors and data races, account for approximately 70% of vulnerabilities (CVEs) in such systems, despite extensive mitigations like code reviews and static analysis. For instance, use-after-free bugs have been exploited in components like , where pointers reference invalid memory post-deallocation, while data races in switches have led to out-of-bounds writes due to unsynchronized access. By designing Verona to inherently prevent these classes of errors, aims to enhance the trustworthiness and scalability of cloud software. Key goals include establishing a concurrency model that prohibits concurrent to ensure without locks, thereby supporting high-performance suitable for resource-constrained environments. Additionally, the language facilitates gradual adoption in existing ecosystems through a C++ (FFI), allowing interoperability with legacy code while progressively replacing unsafe components. This approach targets the elimination of entire categories of bugs that plague , promoting a shift toward memory-safe paradigms. The project's emphasis on safe, OS-level programming draws historical influence from Microsoft's earlier initiative, which explored dependable systems through innovative language and runtime designs to minimize software failures. Building on these foundations, Verona extends the pursuit of secure concurrency to modern cloud infrastructure needs.

Development Timeline

Project Verona was initiated around by , in collaboration with researchers from and , to explore safe and scalable memory management for cloud infrastructure programming. The project received its first public attention in late 2019, followed by an official announcement and open-sourcing of the initial prototype on in January 2020 under the , enabling early academic collaboration and feedback. From 2021 to 2023, the development team undertook major refactoring efforts to stabilize the language prototype, including restructuring the and components, with the previous version preserved in a dedicated branch for reference. In 2024, key advancements were documented in publications presented at major conferences, including "BatchIt: Optimizing Message-Passing Allocators for Producer-Consumer Workloads" at ISMM, which introduced optimizations for allocators like snmalloc used in Verona's , and "Concurrent Immediate " in the Proceedings of the ACM on Programming Languages, enhancing safe concurrent memory reclamation. In 2025, the project published "Dynamic Region Ownership for Concurrency Safety," which explores dynamic enforcement of region discipline for improved concurrency safety, presented in peer-reviewed venues. As of November 2025, Project Verona remains an active research endeavor, with ongoing commits to its repository reflecting continued experimentation, though it is still considered experimental and not suitable for production use.

Core Design Concepts

Ownership Model

Project Verona's ownership model introduces concurrent ownership to enable safe sharing of data across multiple threads while preventing data races at . Central to this is the concept of "cowning," or co-ownership, where objects can be jointly owned by multiple regions for read-only access, allowing concurrent reads without locks. This extends traditional single-owner models by grouping objects into regions, ensuring that mutable access requires exclusive acquisition to avoid conflicts. Ownership types in Verona enforce linear usage for exclusive mutable access via iso (isolated) pointers, which provide unique of a and can only be transferred through move operations, invalidating the source reference. For shared access, cown (concurrent owner) types support co-, where multiple behaviours—Verona's of concurrent execution—can acquire cowns atomically to access protected data, but only when no overlapping acquisitions exist, guaranteeing no concurrent mutations. Immutable objects, by contrast, permit unrestricted sharing across owners. These types draw inspiration from Rust's borrow checker but adapt it for group-based in concurrent settings, formalizing semantics that prohibit of mutable references during active use. The formal semantics for ownership transfer and borrowing emphasize safety in concurrent scenarios. Transfer occurs via explicit moves, such as reassigning an iso pointer to another , which requires the source region to be closed to ensure no dangling references; this propagates linearly without runtime overhead. Borrowing allows temporary read access within a , but for mutable borrowing under cowns, a behaviour must the cown via an atomic operation (e.g., acquire), releasing it upon completion to enable others, preventing deadlocks through ordered acquisition rules. In a producer- , for instance, a producer behaviour might own an iso to a and spawn consumer behaviours that shared cowns for read-only , ensuring the producer's mutations are isolated until a or explicit share. This model integrates briefly with region-based isolation to compartmentalize memory, but focuses on compile-time enforcement of concurrency invariants.

Region-Based Memory Management

In Project Verona, regions serve as first-class entities that encapsulate groups of objects, providing a structured approach to through automatic deallocation upon region exit. These regions organize the program's into a forest of isolated scopes, where each region is a set of objects managed collectively, eliminating the need for collection or manual memory operations. By localizing costs to the currently active region, this system enables predictable performance and compile-time verification of deallocation safety. Verona distinguishes between linear regions, which enforce exclusive access via a single mutable , and shared regions, which permit immutable sharing across scopes while maintaining temporary immutability when not active. Linear regions operate on a last-in, first-out (LIFO) , ensuring a single window of mutability at any time to prevent concurrent modifications. Programmers allocate objects directly within regions without explicit pointers or delete statements, as the language's model—applied within regions—handles reference tracking and cleanup automatically. Region nesting allows hierarchical structures, where child regions can reference parent regions through objects, but access is suspended when a parent becomes active, enforcing . This design prevents issues by restricting external references to a region's object alone when closed, thereby avoiding unintended or races without overhead for alias analysis. Immutable objects within regions remain accessible freely, supporting safe read-only operations. Compared to traditional allocators, Verona's regions offer similar bulk allocation for short-lived tasks—such as request processing—with reduced costs for allocation and deallocation relative to manual methods. However, regions extend this by providing compile-time guarantees on object lifetimes through an with reference capabilities, ensuring static detection of when entire regions can be invalidated and reclaimed, unlike arenas that rely on scoping.

Language Features

Concurrency Primitives

Project Verona provides concurrency through a model called Behaviour-Oriented Concurrency (BoC), which uses a single to express both parallelism and coordination while ensuring causal ordering, implicit parallelism, and from deadlocks and races. This approach centers on cowns (concurrent owners), which are lightweight, isolated units of state that encapsulate mutable and enable safe concurrent access without traditional synchronization mechanisms like locks or mutexes. Cowns serve as the foundation for lightweight processes, allowing developers to create concurrent tasks that operate on disjoint or coordinated state without risking races, as access is strictly controlled by rules. Communication between these tasks occurs primarily through shared immutable data or by triggering state changes in cowns, rather than explicit channels. For instance, a cown can hold immutable references that multiple tasks read concurrently, while mutable operations require exclusive . Ownership transfer enables safe handoff of mutable state: a task can relinquish control of a cown to another, ensuring linear progression of mutations without overlap. This is exemplified in syntax where cowns are created and manipulated, such as var acc = cown.create(Account{balance: 100});, allowing subsequent behaviours to acquire and transfer atomically. The absence of locks eliminates contention hotspots and deadlocks, as concurrency is governed by the language's rather than manual . To spawn concurrent regions, Verona uses the when keyword to define behaviours, which are asynchronous code blocks triggered by access to one or more cowns. A simple behaviour might deduct from an account balance: when (src) { src.balance -= amount; }, spawning a task that executes concurrently upon invocation. For coordinated operations across multiple cowns, such as a , the syntax extends to when (src, dst) { src.balance -= amount; dst.balance += amount; }, ensuring acquisition and release to prevent races. Joining these regions happens implicitly through a happens-before relation: when behaviours share cowns, the language enforces ordering based on overlapping access, guaranteeing that prior mutations complete before subsequent ones begin. This supports fork-join patterns naturally; for example, a parallel computation can fork multiple nested when blocks on disjoint cowns and join upon their collective completion, as in a divide-and-conquer algorithm where sub-tasks process separate regions and synchronize at the root. For I/O-bound tasks in environments, Verona integrates async programming seamlessly into its BoC model, allowing behaviours to await non-blocking operations without blocking the entire scheduler. Behaviours can incorporate async I/O calls, such as requests, within when blocks, leveraging the to schedule them efficiently across cowns while preserving safety. This enables scalable, event-driven concurrency for infrastructure applications, where tasks like data replication across regions can run asynchronously and coordinate via cown state changes. Safety for all these primitives is ensured by Verona's , which tracks and at .

Type System and Safety Guarantees

Project Verona's type system is built around reference capabilities that enforce ownership and aliasing discipline, ensuring memory safety and race-freedom without a traditional garbage collector. Ownership types in Verona include iso for exclusive ownership, providing a unique mutable reference to the root of a closed region, preventing any aliasing; imm for shared immutable references, allowing multiple read-only accesses to permanently immutable objects; and borrowed types such as mut for intra-regional mutable access, tmp for temporary mutable references, and paused for immutable access to suspended regions. These capabilities are integrated with effects that track mutation and concurrency, restricting mutable access to a single "window of mutability" per thread at any time, thereby eliminating data races by design. Region polymorphism in Verona enables generic reasoning over regions through these reference capabilities, treating regions as first-class entities in a forest structure where objects are grouped hierarchically. rules support safe interactions between regions, such as the adaptation of types based on the observer's viewpoint (e.g., mut C_L <: iso C_L for a closed region C under local observation L), allowing flexible sharing while preserving isolation invariants. Compile-time verification leverages linear types to ensure resources like exclusive references are used exactly once, preventing both data races—through enforced single mutable access—and memory leaks, as region lifetimes are statically bounded by transfer rules. The type system's safety properties are formally proven, including (every well-formed can make a step or is a value) and preservation (steps preserve well-typedness) under concurrent execution, relying on a invariant that maintains the acyclic forest of regions and enforces ordering constraints. These proofs, conducted in a core calculus, guarantee that concurrent operations respect region isolation and capability restrictions, ensuring no from or concurrent . This formal foundation underpins Verona's compile-time guarantees for race-free and leak-free programs.

Implementation Details

Compiler Architecture

The Verona compiler is implemented in C++ to enable tight integration with and support high-quality foreign function interfaces (FFI) with existing C++ codebases. This choice facilitates seamless , with potential for self-hosting in the long term. As of 2023, the prototype is in an early stage, with partial type checking and limited features. The project has investigated using for the back-end to generate , with MLIR as an for optimizations, targeting platforms including Windows and . Build integration is handled through for cross-platform configuration and for Windows-specific development.

Runtime Environment

The Verona runtime is implemented as a C++ library that provides the foundational support for the language's concurrency and features during execution. It manages the execution of region-based tasks through a lightweight scheduler that avoids creating an OS thread for every process, instead utilizing a with work-stealing mechanisms to dispatch behaviors—atomic units of work—based on a (DAG). This design enables efficient, low-latency coordination without the overhead of traditional thread-per-task models. Region boundaries and transfers are enforced at via the concurrent ownership model, where "cowns" (concurrent owners) grant exclusive access to resources within isolated regions. The ensures acquisition of required cowns before executing a , validating to prevent data races and deadlocks; transfers occur only when a region's local reference count reaches zero, confirming closure and safe movement of . This enforcement leverages and write-barriers to track object membership and permissions dynamically, complementing compiler-generated for seamless . For legacy integration, the supports (FFI) with C++ through tight coupling with the compiler, facilitating marshalling of data across boundaries. This allows Verona code to interoperate with existing C++ libraries while preserving safety guarantees, such as ownership invariants during calls and returns. Performance-wise, the exhibits low overhead for concurrency, with the scheduler enabling near-linear scaling on multi-core systems in benchmarks like Savina, where it outperforms actor-based models in 17 out of 22 cases due to minimized costs. Sequential executions incur negligible checks, primarily untaken branches, while multithreaded scenarios benefit from the region's isolation for efficient resource partitioning. Recent research as of 2024 includes optimizations for message-passing allocators in the runtime.

Research Contributions

Key Publications

The foundational concepts of in Project Verona were introduced through its in the 2023 OOPSLA paper "Reference Capabilities for Flexible Memory Management" by Ellen Arvidsson, Elias Castegren, Sylvan Clebsch, Sophia Drossopoulou, James Noble, Matthew J. Parkinson, and Tobias Wrigstad. This work describes Verona's Reggio system, where objects are grouped into a forest of isolated regions, and reference capabilities enforce rules to prevent data races and ensure in concurrent object-oriented programs without relying on a traditional garbage collector. The paper formalizes how these capabilities control access to regions, enabling flexible sharing while maintaining isolation, and evaluates the approach on an initial prototype implementation. Verona's concurrency model was presented in the 2023 OOPSLA paper "When Concurrency Matters: Behaviour-Oriented Concurrency" by Luke Cheeseman, Sylvan Clebsch, Matthew Johnson, Matthew J. Parkinson, and Sophia Drossopoulou. This work introduces behaviour-oriented concurrency (BoC), which generalizes the by defining concurrency at the level of object behaviours rather than entire objects, allowing fine-grained control over interleavings and ensuring deterministic execution where needed. The paper proves BoC's safety properties, including data-race freedom, and demonstrates its in Verona's , supporting efficient parallel execution without locks. Building on region semantics, the 2025 PLDI paper "Dynamic Region Ownership for Concurrency Safety" by Fridtjof Peer Stoldt, Brandt Bucher, Sylvan Clebsch, Matthew Johnson, Matthew J. Parkinson, and extends Verona's model to dynamic languages like , introducing mechanisms for transfer and enforcement. It details formal models for dynamic commitment, allowing safe concurrency by tracking at without static types, and demonstrates practical via a extension called Pyrona. The approach ensures data-race through explicit commitment protocols, with evaluations showing minimal overhead for concurrent workloads. These works, spanning ownership foundations, behaviour-oriented concurrency, and dynamic safety guarantees, have appeared in premier venues such as OOPSLA and PLDI, influencing research on safe, scalable concurrency in systems programming.

Influences and Comparisons

Project Verona draws inspiration from several prior systems and languages focused on safe concurrency and memory management. Microsoft's Singularity operating system influenced its approach to safe concurrency through isolated components and message-passing primitives, emphasizing runtime isolation to prevent data races. The actor model in Pony provided key ideas for reference capabilities and isolated heaps, enabling Verona to adopt similar mechanisms for concurrency without shared mutable state. Rust's ownership and borrowing system shaped Verona's type system, particularly in enforcing linearity to ensure memory safety at compile time. In comparison to contemporaries, Verona diverges from by replacing the borrow checker's fine-grained, scope-based restrictions with region-based ownership, which groups objects into isolated subgraphs for automatic, deterministic rather than per-reference borrowing. This allows more flexible and supports complex data structures without resorting to unsafe code, trading some precision for usability in large-scale systems. Against , Verona prioritizes regions over a pure for infrastructure applications, enabling per-region allocation strategies (such as arenas or ) instead of uniform actor-local , thus avoiding asynchronous messaging overhead while maintaining isolation. Verona connects to broader related work in academic languages through its use of linear types, extending concepts like linear region references to relax per-object linearity while preserving safety, as explored in systems such as those by Fluet et al. for functional languages. It also relates to compartmentalization techniques in secure systems, where region isolation mirrors confinement models to limit and enable thread-safe access without locks or atomics, drawing from types in works like Clarke's for encapsulation. Among its unique aspects, Verona emphasizes seamless integration with C++ via a Clang-based and , allowing incremental adoption in existing codebases without full rewrites. It targets cloud-scale infrastructure by eschewing traditional garbage collection in favor of region-driven, scalable that supports predictable costs and high throughput.

Current Status

Open-Source Development

Project Verona's source code is hosted on the GitHub repository at github.com/microsoft/verona, where it has been available as an open-source project since its initial release in January 2020. The project is licensed under the MIT License, which permits broad reuse and modification while requiring attribution to Microsoft Research. This licensing choice supports the project's goal of encouraging experimentation and collaboration in programming language research. To build and develop Verona, contributors require 2019 or later for Windows-based compilation, along with for generating build files. Additionally, 3 is necessary to execute tests after compilation. These requirements reflect the project's C++-based implementation and its emphasis on cross-platform compatibility, though primary development occurs on Windows. The repository includes an old_version branch preserving earlier iterations, allowing developers to reference historical prototypes without disrupting ongoing work. Contribution guidelines emphasize that remains a research-oriented , not suitable for production use, and encourage submissions focused on exploratory features or academic extensions rather than general-purpose enhancements. The project welcomes pull requests through standard workflows, but maintainers prioritize changes aligned with core objectives, such as concurrent models. As of 2025, the has attracted 31 contributors, indicating steady but specialized involvement. Current efforts include ongoing refactoring to enhance stability and modularity, addressing the evolving needs of the research prototypes.

Community and Future Directions

Project Verona has fostered partnerships between and academic institutions, notably and , to advance its research objectives. Key figures involved include Matthew Parkinson, a principal researcher at who contributes to the project's , and Mads Torgersen, whose early insights helped initiate the research . These collaborations expertise in programming languages and to explore concurrent ownership models. The project encourages community engagement, particularly from academia, through its open-source repository on GitHub, where calls for research collaborations are explicitly invited via issues and discussions. While the contributor base remains limited at around 31 individuals, reflecting its research-focused stage, interest is growing within programming language (PL) communities, as evidenced by presentations at events like PLISS 2023. The initiative emphasizes early-stage involvement for non-production use only, promoting contributions to language design and runtime enhancements. Looking ahead, future directions include tighter integration with C++ compilers for its full runtime implementation, expansions in to strengthen guarantees like freedom and data race prevention, and explorations of production pilots within ’s cloud infrastructure. These efforts aim to evolve Verona into a scalable tool for safe . Challenges persist in maturing the project from a research prototype to a broadly usable tool, with no firm release timeline established as of 2025. The focus remains on refining core concepts like concurrent ownership before wider adoption.

References

  1. [1]
    Project Verona - Microsoft Research
    Project Verona is a highly ambitious research project to make that a reality for the infrastructure we build for the cloud.Microsoft Research BlogProject VeronaMicrosoft Research: GroupsTalks WorkshopsMicrosoft Research 블로그
  2. [2]
    Reference Capabilities for Flexible Memory Management - arXiv
    Sep 6, 2023 · Verona is a concurrent object-oriented programming language that organises all the objects in a program into a forest of isolated regions.
  3. [3]
    Frequently asked questions | Project Verona - Microsoft Open Source
    Project Verona is a research project being run by Microsoft Research with academic collaborators at Imperial College London.
  4. [4]
    microsoft/verona: Research programming language for ... - GitHub
    Project Verona is a research programming language to explore the concept of concurrent ownership. We are providing a new concurrency model that seamlessly ...
  5. [5]
    Project Verona - Microsoft Research: Publications
    Publications · When Concurrency Matters: Behaviour-Oriented Concurrency. Luke Cheeseman, Matthew J. · Reference Capabilities for Flexible Memory Management. Ellen ...Missing: papers | Show results with:papers
  6. [6]
    We need a safer systems programming language - Microsoft
    Jul 18, 2019 · In this post, we'll explore some real-world examples of vulnerabilities found in Microsoft products (after testing and static analysis) that ...
  7. [7]
    Microsoft: We're creating a new Rust-like programming language for ...
    Dec 2, 2019 · Microsoft's Project Verona involves creating a new language for "safe infrastructure programming" to be open-sourced soon.
  8. [8]
    Singularity - Microsoft Research
    Singularity was a multi-year research project focused on the construction of dependable systems through innovation in the areas of systems, languages, and tools ...Missing: Verona influence<|control11|><|separator|>
  9. [9]
    Microsoft opens up Rust-inspired Project Verona programming ...
    Jan 17, 2020 · Project Verona aims to help secure code in unsafe languages like C and C# that still exists in a lot of Microsoft's legacy code.
  10. [10]
    BatchIt: Optimizing Message-Passing Allocators for Producer ...
    Jun 25, 2024 · Modern, high-performance memory allocators must scale to a wide array of uses, including producer-consumer workloads.
  11. [11]
    Concurrent Immediate Reference Counting - Microsoft Research
    Jun 1, 2024 · update-heavy workloads. We present Concurrent Immediate Reference Counting (CIRC), a new combination of SMR algorithms with reference counting.Missing: ISMM | Show results with:ISMM
  12. [12]
    Dynamic Region Ownership for Concurrency Safety - Microsoft
    Jun 1, 2025 · In this paper, we explore retrofitting an existing dynamically typed programming language with an ownership model based on regions.
  13. [13]
    [PDF] PLISS 2023 SOPHIA DROSSOPOULOU, IMPERIAL COLLEGE ...
    Sep 20, 2023 · What is Project Verona? Language design project. Key aim: Provide safe, local memory management. Scaling is essential. Static ownership is ...
  14. [14]
    [PDF] Dynamic Region Ownership for Concurrency Safety - Microsoft
    We provide dynamic enforcement of our region discipline, which we have implemented in a simple interpreter that provides a Python- like syntax and semantics, ...
  15. [15]
  16. [16]
  17. [17]
    Users of MLIR - LLVM
    Project Verona is a research programming language to explore the concept of concurrent ownership. They are providing a new concurrency model that seamlessly ...
  18. [18]
    Building with MSVC 2019 needs EHSC option · Issue #49 - GitHub
    Jan 19, 2020 · My environments are follows: OS: Windows 10 Pro x64. System Locale: Japanese (CP932) Compiler: Visual Studio 2019 16.4.3.<|control11|><|separator|>
  19. [19]
    None
    Summary of each segment:
  20. [20]
    microsoft/verona-rt: The runtime for the Verona project - GitHub
    This repository contains the runtime for the Verona research project. See the main Verona repo for more information.
  21. [21]
    Reference Capabilities for Flexible Memory Management
    Verona is a concurrent object-oriented programming language that organises all the objects in a program into a forest of isolated regions. Memory is managed ...
  22. [22]
    [PDF] Reference Capabilities for Flexible Memory Management - arXiv
    Verona is a concurrent object-oriented programming language that organises all the objects in a program into a forest of isolated regions.
  23. [23]
    Project Verona: Research programming language for concurrent ...
    Jan 16, 2020 · Project Verona lists Singularity and Pony as influences. Here is some background that connects these dots: Microsoft attempted to commercialize ...
  24. [24]
    [PDF] Reference Capabilities for Flexible Memory Management - DiVA portal
    This paper introduces Verona's region system—Reggio—and its accompanying type system. Reggio gives programmers control over memory management costs by dividing ...
  25. [25]
    Microsoft Project Verona: Research programming language for ...
    Jan 17, 2020 · You will need to install Visual Studio 2019 and cmake. To build and run tests, you will need Python 3. Open source: Now needs closed source ...
  26. [26]
  27. [27]
    Matthew J. Parkinson - PLDI 2024
    ISMM · BatchIt: Optimizing Message-Passing Allocators for Producer-Consumer Workloads: An Intellectual Abstract · Reference Counting Deeply Immutable Data ...<|separator|>