What Is LibreOffice UNO Architecture?

Universal Network Objects (UNO) is the underlying component model and interoperability architecture that powers the LibreOffice office suite. This article explores how UNO functions, detailing its core components, language-independent interface definition, runtime environment, and how it enables multi-language programming, scripting, and cross-platform application integration.


Core Concept of UNO

Universal Network Objects (UNO) is an interface-based component architecture similar to Microsoft COM or CORBA. It serves as the backbone of LibreOffice by separating the definition of functionality from its actual implementation. In UNO, an application is built as a set of loosely coupled components that interact exclusively through well-defined interfaces rather than direct internal code references.

This design ensures that LibreOffice remains modular, platform-independent, and extensible without requiring modifications to the core codebase.


Key Structural Elements

1. Interfaces and Services

2. UNO Interface Definition Language (UNO-IDL)

To maintain language neutrality, all UNO interfaces, services, structs, enums, and exceptions are specified in UNO-IDL files. The IDL compiler converts these specifications into binary type registries (.rdb files) and generates language-specific headers and wrapper classes.

3. Language Bridges

UNO supports multiple programming languages through language bindings or bridges. These bridges map UNO data types and method calls to the native constructs of target languages. Supported environments include: * C++: Native, high-performance direct binding. * Java: Bound via Java Native Interface (JNI). * Python: Widely used for macros, external automation, and scripting. * LibreOffice Basic: The built-in macro language for end-user scripting. * CLI/.NET: Interface available on compatible platforms.

4. The UNO Runtime Environment (URE)

The URE is the execution engine that manages UNO components. It handles: * Component Loading: Dynamically finding and activating shared libraries or packages. * Service Manager: The central registry and factory used to instantiate components and services at runtime. * Type Registry: Loading and resolving type information across language boundaries.


Communication Modes: In-Process vs. Out-of-Process

UNO supports two primary modes of execution:

  1. In-Process Communication: When extensions or plugins run inside the same memory space as the running LibreOffice process, UNO uses direct C++ function pointers or lightweight in-process bridges (Binary UNO) to minimize overhead.
  2. Inter-Process Communication (Remote UNO): UNO objects can communicate across separate processes, machines, or networks using network sockets or named pipes. This capability allows external applications to control LibreOffice in a headless server environment for automated tasks, such as bulk PDF generation and document conversion.

Practical Use Cases for UNO