LIBSOLV-CONSTANTIDS(3)
π LIBSOLV-CONSTANTIDS β the libsolv manual, section 3 β¨
okay bestie, welcome to the fixed-Id hall of fame, this is libsolv-constantids from the LIBSOLV manual and it's lowkey the most organized page in the whole vibe πΈ
π NAME π
libsolv-constantids β fixed Ids for often used strings π
β¨ DESCRIPTION β¨
so. Constant Ids are Ids of strings that come up constantly. They're defined so you can actually write code without losing your mind, and so the number of pool_str2id calls goes wayyy down. fr fr, that's the whole point.
These constant Ids are part of the binary ABI of libsolv. What that means: a minor version update will only ever add new constants, it will never change the existing Ids β compatibility stays intact, no cap. π
The on-disk solv format does not use the fixed Ids tho. It references the strings instead, so solv files can still be read even when the ABI is broken. iconic design tbh π¦
π SPECIAL STRINGS π
ID_EMPTY""β the empty string, and it will always have Id1. periodt.SYSTEM_SYSTEM"system:system"β the name of the always-installed "system" solvable. it's literally always there, main character energy π
π«Ά SOLVABLE ATTRIBUTES π«Ά
these are Ids for keynames of attributes. you use them in the lookup and storage functions to select the right attribute inside the solvable. and every description below is telling you the intended semantics of the values stored under that keyname, k? π
πΈ the core package info πΈ
SOLVABLE_NAME"solvable:name"β the name of the package.SOLVABLE_ARCH"solvable:arch"β the architecture of the package. peep the Solvable Architecture section for the predefined architecture Id values.SOLVABLE_EVR"solvable:evr"β the version of the package. usually it's some combo of the Epoch, the Version, and the Release of the solvable.SOLVABLE_VENDOR"solvable:vendor"β a vendor string. usually whoever (company or group) built the binary package.
π dependency arrays (the gossip) π
SOLVABLE_PROVIDES"solvable:provides"β an array of dependency Ids describing the capabilities this package provides.SOLVABLE_OBSOLETES"solvable:obsoletes"β an array of dependency Ids describing the packages this package replaces.SOLVABLE_CONFLICTS"solvable:conflicts"β an array of dependency Ids describing the capabilities this package conflicts with, i.e. the ones that can't be installed together with it. they do not get along, at all πSOLVABLE_REQUIRES"solvable:requires"β an array of dependency Ids describing the capabilities that must also be installed when this package is installed.SOLVABLE_RECOMMENDS"solvable:recommends"β an array of dependency Ids describing capabilities that should also be installed alongside this package. and no, it's not an error if not all of them can be met, breathe π«ΆSOLVABLE_SUGGESTS"solvable:suggests"β an array of dependency Ids for capabilities that are also useful to have installed with this package. it's a lil hint to the user about other packages β¨SOLVABLE_SUPPLEMENTS"solvable:supplements"β an array of dependency Ids defining that this package should be installed if one of the capabilities is met. it's like recommends but running in reverse, the way that it works backwards is so cunty π₯SOLVABLE_ENHANCES"solvable:enhances"β an array of dependency Ids defining that this package is useful to have installed if one of the capabilities is met. like suggests, but reversed. same energy, opposite direction π¦
π text-y stuff π
SOLVABLE_SUMMARY"solvable:summary"β should be a short string, no newlines, describing what the package does.SOLVABLE_DESCRIPTION"solvable:description"β a more verbose description of what the package does. it may be multiple lines, go off.SOLVABLE_DISTRIBUTION"solvable:distribution"β a short string describing the OS and OS version this package is built for.SOLVABLE_AUTHORS"solvable:authors"β a list of authors of this package. this attribute was used in SUSE packages.SOLVABLE_PACKAGER"solvable:packager"β the person who created the binary package. also check the vendor attribute, bestie.SOLVABLE_GROUP"solvable:group"β the package group this package belongs to. see also the keywords attribute.SOLVABLE_URL"solvable:url"β an URL pointing to more info about the package πSOLVABLE_KEYWORDS"solvable:keywords"β list of keyword string IDs used for tagging this package.SOLVABLE_LICENSE"solvable:license"β the license(s) of this package.SOLVABLE_BUILDTIME"solvable:buildtime"β seconds since the unix epoch when the binary package was created.SOLVABLE_BUILDHOST"solvable:buildhost"β the name of the host where the binary package was created.SOLVABLE_EULA"solvable:eula"β if this attribute is present, the user should be asked to accept the end user license agreement before the package gets installed. read before you install, babe πSOLVABLE_CPEID"solvable:cpeid"β a Common Platform Enumeration string describing the platform this package is intended for. see also the distribution attribute.
π messages π
SOLVABLE_MESSAGEINS"solvable:messageins"β a message to display to the user when the package gets installed.SOLVABLE_MESSAGEDEL"solvable:messagedel"β a message to display to the user when the package gets erased.
πΎ sizes, files, times πΎ
SOLVABLE_INSTALLSIZE"solvable:installsize"β the disk space in bytes needed when installing the package.SOLVABLE_DISKUSAGE"solvable:diskusage"β a SUSE extension that stores, for each directory, the needed amount of disk space in kilobytes and inodes.SOLVABLE_FILELIST"solvable:filelist"β a list of files that the package contains.SOLVABLE_INSTALLTIME"solvable:installtime"β seconds since the unix epoch when the binary package was installed on the system.
π¦ media / repo location π¦
SOLVABLE_MEDIADIR"solvable:mediadir"β the directory on the repository that contains the package. if this attribute is set to void, the package architecture is used as the directory.SOLVABLE_MEDIAFILE"solvable:mediafile"β the filename on the repository that contains the package. if this attribute is set to void, the canonical file name of the package is used (i.e. a combination of the name, version, architecture).SOLVABLE_MEDIANR"solvable:medianr"β the media number, an integer saying which one of a multi-part media set this package is on.SOLVABLE_MEDIABASE"solvable:mediabase"β can be used to overwrite the repositories base url.SOLVABLE_DOWNLOADSIZE"solvable:downloadsize"β the size of the binary package in bytes.
𧬠source package info π§¬
SOLVABLE_SOURCEARCH"solvable:sourcearch"β the architecture of the source package this package belongs to.SOLVABLE_SOURCENAME"solvable:sourcename"β the name of the source package this package belongs to. if set to void, the package name attribute is used instead.SOLVABLE_SOURCEEVR"solvable:sourceevr"β the version of the source package this package belongs to. if set to void, the package version attribute is used instead.
βοΈ triggers & checksums βοΈ
SOLVABLE_TRIGGERS"solvable:triggers"β a list of package triggers for this package. used in the transaction ordering code.SOLVABLE_CHECKSUM"solvable:checksum"β the checksum of the binary package. see the Data Types section for the list of supported algorithms.SOLVABLE_PKGID"solvable:pkgid"β a string identifying a package. for rpm packages, this is themd5sumover the package header and the payload.SOLVABLE_HDRID"solvable:hdrid"β a string identifying a package. for rpm packages, this is thesha1sumover just the package header.SOLVABLE_LEADSIGID"solvable:leadsigid"β a string identifying the signature part of a package. for rpm packages, this is themd5sumfrom the start of the file up to the package header (i.e. it includes the lead, the signature header, and the padding).SOLVABLE_HEADEREND"solvable:headerend"β the offset of the payload in rpm binary packages. you can use this to download just the header when you wanna display info that isn't in the repository metadata. so smart honestly π
π changelog π
SOLVABLE_CHANGELOG"solvable:changelog"β the array containing all the changelog structures.SOLVABLE_CHANGELOG_AUTHOR"solvable:changelog:author"β the author of a changelog entry.SOLVABLE_CHANGELOG_TIME"solvable:changelog:time"β seconds since the unix epoch when the changelog entry was written.SOLVABLE_CHANGELOG_TEXT"solvable:changelog:text"β the text of a changelog entry.
and that's just the first batch, bestie β part 2 is loading π₯π§
β¨ SPECIAL SOLVABLE ATTRIBUTES β¨
RPM_RPMDBID "rpm:dbid"β the rpm database id of this (installed) package. Usually a small integer number. πSOLVABLE_PATCHCATEGORY "solvable:patchcategory"β the category field for patch solvables. Should be namedβupdate:categoryβinstead. like, the name is giving legacy, bestie πUPDATE_REBOOT "update:reboot"β if this attribute is present, the system should be rebooted after the update is installed. π₯UPDATE_RESTART "update:restart"β if this attribute is present, the software manager should be run again after the update is installed. πUPDATE_RELOGIN "update:relogin"β if this attribute is present, the user should log off and on again after the update is installed. πUPDATE_MESSAGE "update:message"β a message that should be shown to the user to warn him about anything non-standard. β οΈUPDATE_SEVERITY "update:severity"β the severity of the update. π¨UPDATE_RIGHTS "update:rights"β any legal or other rights of the update. βοΈUPDATE_COLLECTION "update:collection"β the array containing the package list of the update. π¦UPDATE_COLLECTION_NAME "update:collection:name"β the name of the updated package. π·οΈUPDATE_COLLECTION_EVR "update:collection:evr"β the version of the updated package. π’UPDATE_COLLECTION_ARCH "update:collection:arch"β the architecture of the updated package. ποΈUPDATE_COLLECTION_FILENAME "update:collection:filename"β the file name of the updated package. πUPDATE_REFERENCE "update:reference"β the array containing the reference list of the update. πUPDATE_REFERENCE_TYPE "update:reference:type"β the type of the reference, e.g.bugzilla. πUPDATE_REFERENCE_HREF "update:reference:href"β the URL of the reference. πUPDATE_REFERENCE_ID "update:reference:id"β the identification string of the reference, e.g. the bug number. πUPDATE_REFERENCE_TITLE "update:reference:title"β the title of the reference, e.g. the bug summary. πPRODUCT_REFERENCEFILE "product:referencefile"β the basename of the product file in the package. πPRODUCT_SHORTLABEL "product:shortlabel"β an identification string of the product. π·οΈPRODUCT_DISTPRODUCT "product:distproduct"β Obsolete, do not use. Was a SUSE Code-10 product name. πPRODUCT_DISTVERSION "product:distversion"β Obsolete, do not use. Was a SUSE Code-10 product version. πPRODUCT_TYPE "product:type"β the type of the product, e.g. βbaseβ. πPRODUCT_URL "product:url"β an array of product URLs. πPRODUCT_URL_TYPE "product:url:type"β an array of product URL types. π·οΈPRODUCT_FLAGS "product:flags"β an array of product flags. π©PRODUCT_PRODUCTLINE "product:productline"β a product line string used for product registering. π§΅PRODUCT_REGISTER_TARGET "product:regtarget"β a target for product registering. π―PRODUCT_REGISTER_RELEASE "product:regrelease"β a release string for product registering. πPUBKEY_KEYID "pubkey:keyid"β the keyid of a pubkey, consisting of 8 bytes in hex. πPUBKEY_FINGERPRINT "pubkey:fingerprint"β the fingerprint of a pubkey, usually asha1sumin hex. Old V3 RSA keys use amd5suminstead. πPUBKEY_EXPIRES "pubkey:expires"β the seconds since the unix epoch when the pubkey expires. β³PUBKEY_SUBKEYOF "pubkey:subkeyof"β the keyid of the master pubkey for subkeys. πPUBKEY_DATA "pubkey:data"β the MPI data of the pubkey. π§¬SOLVABLE_ISVISIBLE "solvable:isvisible"β an attribute describing if the package should be listed to the user or not. Used for SUSE patterns. πSOLVABLE_CATEGORY "solvable:category"β the category of a pattern. ποΈSOLVABLE_INCLUDES "solvable:includes"β a list of other patterns that this pattern includes. π₯SOLVABLE_EXTENDS "solvable:extends"β a list of other patterns that this pattern extends. π€SOLVABLE_ICON "solvable:icon"β the icon name of a pattern. π¨SOLVABLE_ORDER "solvable:order"β an ordering clue of a pattern. π’SUSETAGS_SHARE_NAME "susetags:share:name"β Internal attribute to implement susetags shared records. Holds the name of the solvable used for sharing attributes. π§©SUSETAGS_SHARE_EVR "susetags:share:evr"β Internal attribute to implement susetags shared records. Holds the version of the solvable used for sharing attributes. π§©SUSETAGS_SHARE_ARCH "susetags:share:arch"β Internal attribute to implement susetags shared records. Holds the architecture of the solvable used for sharing attributes. π§©
ποΈ SOLVABLE ARCHITECTURES ποΈ
okay so these are the predefined architecture values for commonly used architectures. no cap. β¨
ARCH_SRC "src"β used for binary packages that contain the package sources. π¦ARCH_NOSRC "nosrc"β used for binary packages that contain some of the package sources, but not all files (because of restrictions). π«ARCH_NOARCH "noarch"β this package can be installed on any architecture. Used forrpm. πARCH_ALL "all"β this package can be installed on any architecture. Used forDebian. π§ARCH_ANY "any"β this package can be installed on any architecture. Used forArchlinuxandHaiku. π
π DEPENDENCY IDS π
okay so namespaces are special modifiers that change the meaning of a dependency. Namespace dependencies are created with the REL_NAMESPACE flag. To make custom namespaces work you have to implement a namespace callback function. iykyk. β¨
The dependency markers partition the dependency array in two parts with different semantics. it's giving structural, bestie. π
NAMESPACE_MODALIAS "namespace:modalias"β the dependency is a special modalias dependency that matches installed hardware. π₯οΈNAMESPACE_SPLITPROVIDES "namespace:splitprovides"β the dependency is a special splitprovides dependency used to implement updates that include a package split. A splitprovides dependency contains a filename and a package name, it is matched if a package with the provided package name is installed that contains the filename. This namespace is implemented in libsolv, so you do not need a callback. π§©NAMESPACE_LANGUAGE "namespace:language"β the dependency describes a language. The callback should return true if the language was selected by the user. π£οΈNAMESPACE_FILESYSTEM "namespace:filesystem"β the dependency describes a filesystem. The callback should return true if the filesystem is needed. πΎNAMESPACE_OTHERPROVIDERS "namespace:otherproviders"β this is a hack to allow self-conflicting packages. It is not needed with current rpm version, so do not use this namespace. πSOLVABLE_PREREQMARKER "solvable:prereqmarker"β this marker partitions the normal require dependencies from the prerequires. It is not needed for dependency solving, but it is used by the transaction ordering algorithm when a dependency cycle needs to be broken (non-prereq deps get broken first). πSOLVABLE_FILEMARKER "solvable:filemarker"β this marker partitions the package provides dependencies from the synthetic file provides dependencies added bypool_addfileprovides(). ποΈ
𧬠DATA TYPES π§¬
okay so each attribute data is stored with a type, so that the lookup functions know how to interpret the data. The following types are available, bestie: β¨
REPOKEY_TYPE_VOID "repokey:type:void"β no data is stored with this attribute. Thus you can only test if the attribute exists or not. Useful to store boolean values. π«₯REPOKEY_TYPE_CONSTANT "repokey:type:constant"β the data is a constant 32bit number. The number is stored in the key area, so using it does not cost extra storage space (but you need the extra key space). π’REPOKEY_TYPE_CONSTANTID "repokey:type:constantid"β the data is a constant Id. The Id is stored in the key area, so using it does not cost extra storage space (but you need the extra key space). πREPOKEY_TYPE_ID "repokey:type:id"β the data is an Id. π·οΈREPOKEY_TYPE_NUM "repokey:type:num"β the data is an unsigned 64bit number. π’REPOKEY_TYPE_U32 "repokey:type:num32"β the data is an unsigned 32bit number. Obsolete, do not use. πREPOKEY_TYPE_DIR "repokey:type:dir"β the data is an Id of a directory. πREPOKEY_TYPE_STR "repokey:type:str"β the data is a regular string. πREPOKEY_TYPE_BINARY "repokey:type:binary"β the data is a binary blob. π§¬REPOKEY_TYPE_IDARRAY "repokey:type:idarray"β the data is an array of non-zero Ids. π’REPOKEY_TYPE_REL_IDARRAY "repokey:type:relidarray"β the data is an array of non-zero Ids ordered so that it needs less space. πREPOKEY_TYPE_DIRSTRARRAY "repokey:type:dirstrarray"β the data is a tuple consisting of a directory Id and a basename. Used to store file names. πREPOKEY_TYPE_DIRNUMNUMARRAY "repokey:type:dirnumnumarray"β the data is a triple consisting of a directory Id and two 32bit unsigned integers. Used to store disk usage information. π½REPOKEY_TYPE_MD5 "repokey:type:md5"β the data is a binary md5sum. πREPOKEY_TYPE_SHA1 "repokey:type:sha1"β the data is a binary sha1sum. πREPOKEY_TYPE_SHA256 "repokey:type:sha256"β the data is a binary sha256sum. πREPOKEY_TYPE_FIXARRAY "repokey:type:fixarray"β the data is an array of structures that have all the same layout (i.e. the same keynames and keytypes in the same order). π§±REPOKEY_TYPE_FLEXARRAY "repokey:type:flexarray"β the data is an array of structures that have a different layout. πREPOKEY_TYPE_DELETED "repokey:type:deleted"β the data does not exist. Used to mark an attribute that was deleted. ποΈ
π REPOSITORY METADATA π
Okay so these attributes are literally the meta info about the repository, bestie. Like the receipts for the whole vibe. π
REPOSITORY_SOLVABLES"repository:solvables"β This one holds the array including all of the solvables. It's only used in the on-disk solv files, internally the solvables are stored in the poolβs solvable array for fast access. Periodt.REPOSITORY_DELTAINFO"repository:deltainfo"β This attribute holds the array including all of the delta packages. πREPOSITORY_EXTERNAL"repository:external"β This attribute holds the array including all of the data to construct stub repodata areas to support on-demand loading of metadata. Lowkey iconic.REPOSITORY_KEYS"repository:keys"β This should really be named"repository:external:keys", ngl. It contains an array if Ids that consists of(keyname, keytype)pairs that describe the keys of the stub. πREPOSITORY_LOCATION"repository:location"β This is used to provide a file name in the stub.REPOSITORY_ADDEDFILEPROVIDES"repository:addedfileprovides"β This attribute holds an array of filename Ids, that tell the library, that all of the Ids were already added to the solvable provides.REPOSITORY_RPMDBCOOKIE"repository:rpmdbcookie"β An attribute that stores asha256sumover the file stats of the Packages database. Itβs used to detect rebuilds of the database, as in that case the database Ids of every package are newly distributed.REPOSITORY_TIMESTAMP"repository:timestamp"β The seconds since the unix epoch when the repository was created. β°REPOSITORY_EXPIRE"repository:expire"β The seconds after the timestamp when the repository will expire.REPOSITORY_UPDATES"repository:updates"β An array of structures describing what this repository updates.REPOSITORY_DISTROS"repository:distros"β Also an array of structures describing what this repository updates. Seems to be the newer name ofREPOSITORY_UPDATES. The way that naming is justβ¦ chaotic. πREPOSITORY_PRODUCT_LABEL"repository:product:label"β Should really be called"repository:updates:label". What distribution is updated with this repository.REPOSITORY_PRODUCT_CPEID"repository:product:cpeid"β The cpeid of the platform updated by this repository. Is both used inREPOSITORY_UPDATESandREPOSITORY_DISTROSto maximize confusion. And honestly? It ate. πREPOSITORY_REPOID"repository:repoid"β An array of Id strings describing keywords/tags about the repository itself.REPOSITORY_KEYWORDS"repository:keywords"β An array of Id strings describing keywords/tags about the content of the repository.REPOSITORY_REVISION"repository:revision"β An arbitrary string describing the revision of the repository.REPOSITORY_TOOLVERSION"repository:toolversion"β Some string describing somewhat the version of libsolv used to create the solv file. Cute.
β¨ REPOSITORY METADATA FOR SUSETAGS REPOS β¨
These attributes describe repository files in a susetags repository. Let's get into it. π
SUSETAGS_DATADIR"susetags:datadir"β The directory that contains the packages.SUSETAGS_DESCRDIR"susetags:descrdir"β The directory that contains the repository file resources.SUSETAGS_DEFAULTVENDOR"susetags:defaultvendor"β The default vendor used when a package does not specify a vendor.SUSETAGS_FILE"susetags:file"β An array of file resources of the repository.SUSETAGS_FILE_NAME"susetags:file:name"β The filename of the resource.SUSETAGS_FILE_TYPE"susetags:file:type"β The type of the resource, e.g. βMETAβ.SUSETAGS_FILE_CHECKSUM"susetags:file:checksum"β The file checksum of the resource.
π REPOSITORY METADATA FOR RPMMD REPOS π
REPOSITORY_REPOMD"repository:repomd"β An array of file resources of the repository.REPOSITORY_REPOMD_TYPE"repository:repomd:type"β The type of the resource, e.g. βprimaryβ.REPOSITORY_REPOMD_LOCATION"repository:repomd:location"β The location (aka filename) of the resourceREPOSITORY_REPOMD_TIMESTAMP"repository:repomd:timestamp"β The seconds since the unix epoch when the resource was created.REPOSITORY_REPOMD_CHECKSUM"repository:repomd:checksum"β The file checksum of the resource.REPOSITORY_REPOMD_OPENCHECKSUM"repository:repomd:openchecksum"β The checksum over the uncompressed contents of the resource.REPOSITORY_REPOMD_SIZE"repository:repomd:size"β The size of the resource file.
π¦ DELTA PACKAGE ATTRIBUTES π¦
DELTA_PACKAGE_NAME"delta:pkgname"β The target package name for the delta package. Applying the delta will recreate the target package.DELTA_PACKAGE_EVR"delta:pkgevr"β The version of the target package.DELTA_PACKAGE_ARCH"delta:pkgarch"β The architecture of the target package.DELTA_LOCATION_DIR"delta:locdir"β The directory in the repository that contains the delta package.DELTA_LOCATION_NAME"delta:locname"β The first part of the file name of the delta package.DELTA_LOCATION_EVR"delta:locevr"β The version part of the file name of the delta package.DELTA_LOCATION_SUFFIX"delta:locsuffix"β The suffix part of the file name of the delta package.DELTA_LOCATION_BASE"delta:locbase"β This attribute can be used to overwrite the repositories base url for the delta.DELTA_DOWNLOADSIZE"delta:downloadsize"β The size of the delta rpm file.DELTA_CHECKSUM"delta:checksum"β The checksum of the delta rpm file.DELTA_BASE_EVR"delta:baseevr"β The version of the package the delta was built against.DELTA_SEQ_NAME"delta:seqname"β The first part of the delta sequence, the base package name.DELTA_SEQ_EVR"delta:seqevr"β The evr part of the delta sequence, the base package evr. Identical to theDELTA_BASE_EVRattribute.DELTA_SEQ_NUM"delta:seqnum"β The last part of the delta sequence, the content selection string.
π AUTHOR π
Michael Schroeder <mls@suse.de> β the icon, the legend, the moment. π
This whole masterpiece is from libsolv, dated 03/02/2022, and it's the LIBSOLV-CONSTANTIDS(3) page. No cap, it ate. β¨π
π¦ where this page comes from
- arch rolling: libsolv 0.7.41-1 Β· BSD-3-Clause
- centos-stream 10: libsolv-devel 0.7.33-7.el10 Β· BSD-3-Clause
- centos-stream 9: libsolv-devel 0.7.24-8.el9 Β· BSD
- centos-stream 9: libsolv-devel 0.7.24-8.el9 Β· BSD
- debian bookworm: libsolv-doc 0.7.23-1+deb12u1 Β· BSD-3-Clause
- debian trixie: libsolv-doc 0.7.32-1 Β· BSD-3-Clause
- fedora 43: libsolv-devel 0.7.34-5.fc43 Β· BSD-3-Clause
- fedora 43: libsolv-devel 0.7.34-5.fc43 Β· BSD-3-Clause
- fedora 43: libsolv-devel 0.7.40-1.fc43 Β· BSD-3-Clause
- fedora 43: libsolv-devel 0.7.40-1.fc43 Β· BSD-3-Clause
- fedora 44: libsolv-devel 0.7.36-2.fc44 Β· BSD-3-Clause
- fedora 44: libsolv-devel 0.7.36-2.fc44 Β· BSD-3-Clause
- fedora 44: libsolv-devel 0.7.40-1.fc44
- fedora 44: libsolv-devel 0.7.40-1.fc44
- fedora 44: libsolv-devel 0.7.40-2.fc44
- fedora 44: libsolv-devel 0.7.40-2.fc44
- fedora 44: libsolv-devel 0.7.41-1.fc44 Β· BSD-3-Clause
- fedora 44: libsolv-devel 0.7.41-1.fc44 Β· BSD-3-Clause
- nixos 26.05: libsolv 0.7.39
- nixpkgs unstable: libsolv 0.7.39
- opensuse-leap 16.0: libsolv-devel 0.7.40-160000.1.1 Β· BSD-3-Clause
- opensuse-leap 16.0: libsolv-devel 0.7.40-160000.1.1 Β· BSD-3-Clause
- opensuse-leap 16.0: libsolv-devel 0.7.40-160000.1.1 Β· BSD-3-Clause
- opensuse-leap 16.0: libsolv-devel 0.7.40-160000.1.1 Β· BSD-3-Clause
- ubuntu noble: libsolv-doc 0.7.28-1build2 Β· BSD-3-Clause
- ubuntu questing: libsolv-doc 0.7.32-1
- ubuntu resolute: libsolv-doc 0.7.35-1build1 Β· BSD-3-Clause
- ubuntu stonking: libsolv-doc 0.7.39-1build1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms