Hubbry Logo
ZYppZYppMain
Open search
ZYpp
Community hub
ZYpp
logo
8 pages, 0 posts
0 subscribers
Be the first to start a discussion here.
Be the first to start a discussion here.
ZYpp
ZYpp
from Wikipedia
ZYpp
Initial releaseJanuary 14, 2006; 19 years ago (2006-01-14)[1]
Stable release
17.37.17 Edit this on Wikidata 1.14.93 Edit this on Wikidata / 11 August 2025; 2 months ago (11 August 2025) 18 July 2025; 3 months ago (18 July 2025)
Repositoryhttps://github.com/openSUSE/libzypp Edit this on Wikidata https://github.com/openSUSE/zypper Edit this on Wikidata
Written in
  • ZYpp: C++, XML, C, CMake, Ruby, Python, Perl, shell script, Tcl, Lua Edit this on Wikidata
  • Zypper: C++, CMake, shell script, C, Perl, Augeas, Python Edit this on Wikidata
Operating systemLinux
TypePackage manager
LicenseGNU General Public License
Websiteen.opensuse.org/Portal:Libzypp

ZYpp (or libzypp; "Zen / YaST Packages Patches Patterns Products"[2]) is a package manager engine that powers Linux applications like YaST, Zypper and the implementation of PackageKit for openSUSE and SUSE Linux Enterprise.[3] Unlike some more basic package managers, it provides a satisfiability solver to compute package dependencies.[4] It is a free and open-source software project sponsored by SUSE and licensed under the terms of the GNU General Public License v2 or later. ZYpp is implemented mostly in the programming language C++.

Zypper is the native command-line interface of the ZYpp package manager to install, remove, update and query software packages of local or remote (networked) media. Its graphical equivalent is the YaST package manager module. It has been used in openSUSE since version 10.2 beta1. In openSUSE 11.1, Zypper reached version 1.0. Zypper is also part of the mobile Linux distributions MeeGo, Sailfish OS, and Tizen.

History

[edit]

Purpose

[edit]
Screenshot of zypper dup, showing available updates to install

Following its consecutive acquisitions of Ximian and SuSE GmbH in 2003, Novell decided to merge both package management systems, YaST package manager and Red Carpet, in a best of breed approach, as the two solutions so far were used at Novell. Looking at the extant open source tools and their maturity available back in 2005, none fulfilled the requirements, and were able to work smoothly with the extant Linux management infrastructure software developed by Ximian and SUSE, so it was decided to get the best ideas from extant pieces and to work on a new implementation. Libzypp, the resulting library, was planned to be the software management engine of the SUSE distributions and the Linux Management component of the Novell ZENworks Management suite.

Early days

[edit]

The Libzypp's solver was a port from the Red Carpet solver, which was written to update packages in installed systems. Using it for the full installing process brought it to its limits, and adding extensions such as support for weak dependencies and patches made it fragile and unpredictable.[5] Although this first version of ZYpp's solver worked satisfactorily, on the company enterprise products with the coupled ZMD daemon, it led to an openSUSE 10.1 release which came out in May 2006 with a system package not working as expected. In December 2006, the openSUSE 10.2 release corrected some defects of the prior release, using the revisited ZYpp v2. ZMD was subsequently removed from the 10.3 release and reserved for only the company Enterprise products. While ZYpp v3 provided openSUSE with a relatively good package manager, equivalent to other existing package managers, it suffered from some flaws in its implementation which greatly limited its speed performance.

SAT solver integration

[edit]

An area where libzypp needed improvement was the speed of the dependency solver. libsolv is being written and released under the revised BSD license.[6]

Projects like Optimal Package Install/Uninstall Manager (OPIUM)[7][8] and MANCOOSI[9] were trying to fix dependency solving issues with a SAT solver. Traditional solvers like Advanced Packaging Tool (APT) sometimes show unacceptable deficiencies. It was decided to integrate SAT algorithms into the ZYpp stack; the solver algorithms used were based on the popular minisat solver.[10]

The SAT solver implementation as it appears in openSUSE 11.0 is based on two major, but independent, blocks:

  • Using a data dictionary approach to store and retrieve package and dependency information. A new solv format was created, which stores a repository as a string dictionary, a relation dictionary and then all package dependencies. Reading and merging multiple solv repositories takes only milliseconds.
  • Using satisfiability for computing package dependencies. The Boolean satisfiability problem is a well-researched problem with many exemplar solvers available. It is very fast, as package solving complexity is very low compared to other areas where SAT solvers are used. Also, it does not need complex algorithms and can provide understandable suggestions by calculating proof of why a problem is unsolvable.

After several months of work, the benchmark results of this fourth ZYpp version integrated with the SAT solver were more than encouraging, moving YaST and Zypper ahead of other RPM-based package managers in speed and size.[11][12]

Front ends

[edit]

Typically, YaST has served as the graphical front end for ZYpp in SUSE.[13] ZYpp is also supported by PackageKit.[14]

A new Qt-based front end known as Myrlyn is being developed to replace YaST on openSUSE Leap 16.0.[13]

See also

[edit]

References

[edit]
[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
ZYpp, commonly referred to as libzypp, is a C++ library that serves as the core engine for package management in distributions, particularly and (SLE). It powers key applications such as the command-line tool Zypper, the graphical system configuration tool YaST, and the openSUSE/SLE implementation of PackageKit, enabling operations like software installation, updates, dependency resolution, and repository handling. Developed since 2000, ZYpp originated from efforts by Ximian, Inc., and was subsequently maintained and advanced by SUSE Linux Products GmbH, with its integration into SUSE Linux beginning prominently with version 10.1 in 2006. The library is built atop the libsolv SAT (Boolean ) solver, which provides a highly efficient mechanism for resolving complex package dependencies by modeling them as satisfiability problems, outperforming traditional approaches in speed and accuracy for large repositories. Key features of ZYpp include support for multiple repository metadata formats (such as rpm-md and YaST2), signed repositories for security, media abstraction for accessing local files, HTTP/FTP, ISO images, and NFS, as well as delta RPM calculations for efficient updates and transaction commits via the RPM backend. It also facilitates advanced capabilities like pattern-based installations, patch management for security updates, product-level installations, and support for apk formats (as of July 2025), making it suitable for both individual users and enterprise environments. Licensed under the version 2 or later—with a special exception for linking with —ZYpp emphasizes open-source principles while ensuring compatibility with secure protocols. In practice, ZYpp's abstracts low-level details, allowing frontend tools to focus on user interaction while the library handles the underlying logic for querying repositories, computing installation orders, and managing media changes during operations. Its ongoing development, hosted on with contributions from over 120 developers, continues to incorporate enhancements like parallel downloads as of March 2025 in recent versions, reducing update times by up to 50% in benchmarks. This robust foundation has made ZYpp a cornerstone of SUSE's ecosystem, influencing package management in other distributions through ports like Fedora's libzypp package.

Overview

Definition and Role

ZYpp, also known as libzypp, is a C++ library that serves as the backend engine for package management in and distributions. Its primary role involves handling the installation, updates, removal, and querying of RPM packages, along with repository management and dependency solving. This functionality enables efficient software management by providing APIs for repository access, dependency resolution using a integration, and transaction commits to RPM targets. Unlike user-facing tools, ZYpp operates as the underlying engine, powering applications such as YaST and Zypper without direct user interaction. It supports features like signed repositories, media abstraction for various protocols, and browsing of available and installed software, ensuring robust and secure package operations across SUSE-based systems.

Key Features

ZYpp employs a custom "solv" binary format for repository metadata, which stores package and dependency information using a dictionary-based approach to enable fast loading, querying, and minimal memory usage. This format converts raw metadata into an efficient structure during repository refresh, facilitating rapid access for dependency resolution and package management operations. The supports management of multiple repositories through a media abstraction layer that handles diverse access methods, including local files, HTTP, FTP, ISO images, and NFS. Automatic repository refresh is integrated, along with GPG signature verification to ensure the authenticity of metadata from signed repositories. ZYpp performs transaction-based operations for package installation, updates, and removals, committing changes atomically to the RPM target while supporting features like delta RPM calculation, media handling, and optimized installation sequencing. Multilingual support is provided through translated texts embedded in solv files and locale-aware handling, allowing package descriptions and messages to adapt to the system language. Extensibility is achieved via a plugin system that allows external scripts in any language to hook into core functionality without modifying the library code, including custom URL resolvers for media handlers and service plugins for repository management. ZYpp is free and open-source software, licensed under the GNU General Public License version 2 or later, with an exception for OpenSSL linking.

History

Origins and Early Development

ZYpp, also known as libzypp, was developed by the project in collaboration with to serve as a modern package management library for RPM-based distributions, particularly within the SUSE Linux ecosystem. Following 's acquisitions of Ximian and SUSE GmbH in 2003, the project sought to consolidate disparate package management tools, including the YaST backend and Ximian's (which powered the rug frontend), into a unified solution. This initiative addressed key limitations in existing open-source alternatives like rug and smart, which struggled with efficient dependency resolution, repository management, and integration into enterprise-level Linux infrastructures. The primary motivation was to create a robust, performant library that could handle complex RPM operations while supporting both command-line and graphical interfaces seamlessly. Development began in earnest in as a prototype rewrite of the YaST backend, aiming to leverage the strengths of prior systems while overcoming their shortcomings in speed and dependency handling. The first commits to the libzypp codebase occurred in late , marking the start of active under the project's open development model. Initial efforts focused on core functionalities such as package installation, removal, and querying, without incorporating advanced dependency solving algorithms at the outset. This foundational work enabled libzypp to replace older backends like rug and smart in SUSE environments, providing a more efficient foundation for RPM-based systems. Libzypp made its debut integration in SUSE Linux 10.1, released on May 11, 2006, where it powered initial package management tasks and demonstrated improved performance over predecessors. By December 2006, with the release of 10.2 on December 7, libzypp reached version 2.0, incorporating refinements to basic operations and early fixes for identified issues. This version emphasized a clean C++ and support for multiple repositories, setting the stage for broader adoption while prioritizing conceptual simplicity in package handling.

Major Milestones

A pivotal in ZYpp's evolution occurred in 2008 with the release of version 4.0, integrated into 11.0, which introduced the SAT solver based on libsolv for handling Boolean satisfiability in complex dependency scenarios. This enhancement significantly improved dependency resolution speed and accuracy, replacing earlier mechanisms and enabling more robust package management. During the 2010s, ZYpp expanded to support mobile platforms including (2010–2011) and later (2012 onward), adapting its library for embedded and device-oriented environments. Concurrently, improvements to the solv format optimized repository storage and querying efficiency, reducing file sizes and accelerating metadata processing through advanced dictionary-based structures. Key version releases marked further advancements: version 10 in 2012 enhanced plugin support, allowing greater extensibility for custom hooks and integrations without core modifications. The version 16 series, first released in 2017, incorporated enhanced features such as improved verification of repository metadata and mitigation of vulnerabilities in dependency solving in updates including in 2020. Development progressed to version 17.37.18 on September 22, 2025, focusing on stability and compatibility refinements. Recent developments emphasize ongoing maintenance via the official repository, exemplified by the Zypper 1.14.94 release on September 23, 2025, which included bug fixes for repository handling and integration stability. This front-end update complements ZYpp's backend, including brief adoption in tools like PackageKit for broader ecosystem compatibility.

Architecture

Core Components

libzypp serves as the central C++ library in the ZYpp system, offering a comprehensive for handling package objects, accessing repositories, and managing transactions. It abstracts the complexities of package management, enabling applications to perform operations such as installing, updating, and removing software while ensuring dependency consistency and system integrity. This library integrates with various metadata formats and provides a unified interface for software management tasks across and distributions. The media handler component facilitates access to installation media from diverse sources, including local filesystems, HTTP, FTP, CD/DVD drives, and other protocols like NFS or ISO images. It employs an through classes such as MediaHandler and MediaManager to manage media attachment, file retrieval, and tracking during downloads or mounts. For instance, MediaCurl handles network-based access with support for and proxy configurations, ensuring reliable transfer with error recovery mechanisms. In 2025, libzypp introduced a new media backend supporting parallel package downloads, which became the default and can reduce fetch times significantly. This modular design allows seamless switching between media types without altering core application logic. ZYpp's plugin architecture enables extensibility by allowing external programs to hook into key operations without modifying the core codebase. Plugins are external scripts or binaries placed in directories like /usr/lib/zypp/plugins/, supporting both stateless (stdin/stdout) and stateful (via STOMP protocol) interactions for tasks such as custom URL resolution, repository metadata verification, or post-commit actions. This design accommodates vendor-specific extensions, like applying patches during transactions or integrating third-party dependency resolvers, and can be implemented in any programming language using helpers like zypp-plugin-python. The database backend in libzypp manages the local package database by interfacing directly with the RPM database (rpmdb) to track installed packages, their versions, and dependencies. It provides query and update capabilities through abstractions like the resolver pool, maintaining an efficient, structured representation of the system's software state without relying on separate storage like . Repositories, in contrast, utilize the solv format for metadata storage, as detailed in key features. Error handling and in libzypp are integrated through dedicated mechanisms that support transaction on failures and detailed diagnostic output. The system, configurable via environment variables like ZYPP_LOGFILE and ZYPP_FULLLOG, outputs messages to files or stderr with levels from debug to error, aiding in via classes like LineWriter. This ensures robust recovery, such as aborting incomplete commits and preserving system consistency during operations.

Dependency Resolution

ZYpp employs a Boolean satisfiability (SAT) solver to model and resolve package dependencies as logical clauses, enabling the computation of conflict-free installation sets. Dependencies such as , conflicts, and obsoletes are expressed using literals where a positive literal (A) indicates a package is installed and a negative literal (-A) indicates it is not; for instance, a requirement for package A to have at least one of B1, B2, or B3 is modeled as the clause (-A ∨ B1 ∨ B2 ∨ B3). Conflicts are represented as binary clauses like (-A ∨ -B), ensuring , while obsoletes are treated similarly to conflicts. The dependency problem is formulated by translating these relations into (CNF), a conjunction of disjunctive clauses suitable for input, to find an assignment of truth values that satisfies all clauses while minimizing changes to the system. User requests, such as installing or removing packages, generate unary clauses like (A) for forced installation or (-A) for erasure, integrated into the CNF alongside repository data. The solver then seeks a minimal, conflict-free set of packages, prioritizing system stability by avoiding deinstallations or downgrades through additional policy clauses, such as (A ∨ A2 ∨ A3) to allow only upgrades for an installed package A. ZYpp supports multiple resolver modes to handle varying scenarios. The standard mode serves as the default, automatically resolving dependencies to maintain a consistent system state. In job-based mode, users specify targeted actions like installing particular packages, which generate corresponding rules in the solver queue for precise resolution. Auto-resolution mode incorporates vendor priorities, using weighted rules to prefer packages from higher-priority sources during updates or . Performance optimizations ensure efficient handling of large repositories with thousands of packages. Incremental solving via unit propagation processes clauses iteratively, setting literals to true when a clause reduces to a single option and propagating implications without restarting the entire computation. Caching mechanisms, including a watch array for tracking relevant clauses and the SOLV format for repository data, reduce redundant evaluations and enable rapid querying of available versions. For example, resolving a dependency like "package X requires libfoo >= 1.0" involves creating clauses that check available libfoo versions against the constraint; if versions 1.1 and 2.0 are present, the solver selects the highest compatible one (e.g., (-X ∨ libfoo_1.1 ∨ libfoo_2.0)) while verifying no conflicts, ultimately assigning true to the chosen version if X is installed.

Interfaces

Command-Line (Zypper)

Zypper serves as the primary command-line interface (CLI) to the ZYpp package management library, enabling users to manage software packages on SUSE Linux Enterprise and openSUSE distributions through a text-based, scriptable environment. It provides subcommands for core operations such as installing, removing, updating, and searching for packages, leveraging the underlying libzypp engine for dependency resolution and repository handling. Released alongside libzypp, Zypper emphasizes efficiency and automation, making it suitable for server environments or headless systems without graphical interfaces. Package management in Zypper revolves around straightforward subcommands that handle installation, removal, and updates. For installation, the install or in subcommand is used, as in zypper install <packagename>, which resolves and installs the specified package along with its dependencies. Removal is achieved via remove or rm, for example zypper remove <packagename>, optionally with --clean-deps to purge unneeded dependencies post-removal. Updates are managed through update or up to refresh all installed packages, patch for security and bug fixes, or dist-upgrade (alias dup) for full distribution upgrades, ensuring system consistency. Repository management allows users to add, modify, and refresh sources dynamically. The addrepo or ar subcommand adds a new repository with zypper addrepo <[URL](/page/URL)> <alias>, where the points to the repository metadata and the alias provides a identifier. Modifications are handled by modifyrepo or mr, such as zypper modifyrepo <alias> --enable 1 to activate a repo, while refresh or ref updates metadata from all enabled repositories with zypper refresh. Query functions facilitate package discovery and inspection without altering the system. The or subcommand displays details for a package, like zypper info <packagename>, including version, size, and dependencies. For capability-based searches, what-provides or wp identifies packages providing a specific file or feature, though it is deprecated in favor of search --provides --match-exact <capability>. Pattern searches, useful for software bundles, are performed with search --type pattern <string> or pattern-info <pattern>. Zypper supports scripting and automation through non-interactive modes and standardized exit codes. The --non-interactive flag enables batch operations without prompts, defaulting to yes for confirmations, as in zypper --non-interactive install <packagename>. Exit codes indicate success (0), errors like unmet dependencies (100-106), or repository issues (107-110), allowing integration into shell scripts or pipelines. The latest version of Zypper, 1.14.94, was released on September 23, 2025, incorporating enhancements to parallel downloads for faster package fetching during updates. These improvements build on experimental parallel download support introduced earlier in 2025, reducing bottlenecks in metadata and file retrieval.

Graphical (YaST and Others)

YaST, or Yet another Setup Tool, served as the primary graphical front-end for ZYpp in and distributions until its deprecation in 2025. In earlier versions, its software management module enabled users to browse repositories, search for packages, and perform installations or removals through an intuitive GUI, automatically resolving dependencies via the ZYpp backend. A key feature was support for "patterns," which are predefined groups of related packages—such as desktop environments or server tools—allowing users to install comprehensive software sets with a single selection, streamlining complex setups like base system configurations. The workflow in YaST integrated ZYpp seamlessly for backend operations, featuring step-by-step wizards that guided users through tasks like pattern-based installations or repository management, reducing the risk of configuration errors in graphical environments. For instance, the Online Update module used ZYpp to fetch and apply security patches or updates in a controlled manner, with visual progress indicators and rollback options. Historically, YaST included ncurses-based text interfaces for non-graphical sessions, but its core strength lay in the Qt-based GUI for desktop users. As of openSUSE Leap 16 (released October 2025) and Server 16, Myrlyn has replaced YaST as the primary graphical for ZYpp. Developed during Hack Week in 2024 and initially known as YQPkg, Myrlyn is a standalone Qt-based interface that provides streamlined package management, including intuitive updates, repository handling, and transaction history views. It supports patterns and integrates directly with libzypp for dependency resolution. Myrlyn is now available in Tumbleweed and Leap 16, serving as the default GUI for software management in these distributions. PackageKit provides another graphical layer atop ZYpp through its backend implementation, offering a interface that enables integration with desktop environments such as Software and Discover. This abstraction allows these tools to handle package searches, installations, and notifications uniformly across distributions, leveraging ZYpp's resolver for dependency handling without direct user interaction with low-level commands. ZYpp's adaptability extends to mobile ecosystems, where simplified modules derived from YaST have been incorporated into platforms like and , supporting RPM-based package operations in constrained environments. In , for example, ZYpp powers core package handling akin to desktop uses, enabling efficient on devices.

Integrations

In SUSE Ecosystems

In openSUSE, ZYpp serves as the foundational library powering all package management operations, enabling seamless installation, updates, and removals through front-end tools like Zypper. By default, fresh installations configure essential repositories out of the box, including the Main Repository (OSS) for open-source software and the Main Repository (Non-OSS) for proprietary components, ensuring immediate access to a comprehensive software ecosystem without manual setup. Within , ZYpp is deeply integrated for robust enterprise patching and deployment, particularly via SUSE Manager, which utilizes ZYpp through Zypper to handle package installations, upgrades, and verifications across managed clients. This setup supports Long Term Support (LTSS), allowing organizations to subscribe to extended repositories for sustained security and stability updates beyond standard lifecycles, managed directly with Zypper commands like zypper addrepo for LTSS channels. ZYpp's behavior is customized via the primary /etc/zypp/zypp.conf, which governs global parameters such as solver preferences—for instance, enabling solver.onlyRequires = true to limit installations to strictly required dependencies—and strategies to balance speed, parallelism, and delta compression for efficient repository synchronization. is bolstered by ZYpp's support for automated updates through the zypper dup command, which performs comprehensive distribution upgrades and applies patches to maintain system integrity against vulnerabilities. In SUSE environments, operates by default, with security profiles for applications managed and enforced during package installations to confine newly installed applications and prevent unauthorized access.

Beyond Desktop Linux

ZYpp has found applications in mobile operating systems, particularly those targeting ARM-based devices. It was integrated into in 2010 as the primary package management system, enabling efficient software updates on resource-limited hardware like netbooks and smartphones. Similarly, utilizes ZYpp through its zypper command-line tool for package installation and repository management, as evidenced by official documentation referencing ZYpp history logs for updates. also incorporates ZYpp in its build and development environments, where zypper commands are used for package handling within tools like the GBS (Git Build System) for emulator and device testing. These integrations leverage ZYpp's for dependency resolution, which provides efficient performance suitable for mobile constraints without requiring heavy computational resources. In embedded and IoT contexts, ZYpp supports customized builds tailored for resource-constrained systems. Developers in the and communities have adapted libzypp and zypper for distributions by applying patches to address RPM integration issues and system configuration needs, allowing deployment on devices with limited storage and processing power. These adaptations often involve stripping non-essential plugins to minimize overhead, enabling ZYpp to function in environments like smart devices and industrial controllers where full desktop features are unnecessary. Experimental ports of ZYpp extend its utility beyond SUSE ecosystems to other distributions. In , libzypp and zypper are available as third-party packages through repositories and COPR builds, providing non-native support for RPM-based package without replacing DNF. This allows users to experiment with ZYpp's resolver and media handling capabilities in Fedora environments, though integration remains unofficial and plugin-limited. ZYpp's extensibility is enhanced by its exposure through libzypp, which includes bindings for other languages to facilitate custom tool development. For instance, Python bindings via the python-zypp package enable scripting of package operations, repository queries, and dependency analysis, making it accessible for automation in diverse platforms. Addressing challenges in non-desktop deployments, ZYpp versions post-2010 have incorporated optimizations to reduce , particularly for mobile use cases. Fixes for memory leaks and efficient solver implementations in libzypp updates have lowered resource demands, supporting deployments on devices with limited RAM while maintaining robust dependency resolution.

References

Add your contribution
Related Hubs
User Avatar
No comments yet.