You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -11,43 +11,76 @@ Univers: Ecosystem specific version comparision and conversion
11
11
12
12
13
13
14
-
Why ecosystem specific ?
15
-
========================
14
+
univers was born out of the need for a mostly univeral way to perform software
15
+
package version comparisons in VulnerableCode.
16
16
17
-
Univers was born out of the need for version comparision at VulnerableCode. Existing
18
-
tools follow a particular algorithm to evaluate and compare versions. This is not
19
-
accurate across different ecosystems, since they follow different versioning rules. For
20
-
example there's no concept of 'epoch' in semver based ecosystem like npm or ruby gems, but
21
-
epochs do exist in debian ecosystem. The tools solely based on semver or dpkg version spec therefore
22
-
give different and wrong results in both cases.
17
+
Package version ranges and version constraints are useful and essential:
23
18
24
-
Univers is different, it considers the ecosystem of version.
19
+
- When resolving the dependencies of a package to express which subset of the
20
+
versions are supported. For instance a dependency requirement statement such
21
+
as "I require package foo, version 2.0 and later versions" defines a range of
22
+
acceptable foo versions.
25
23
26
-
How Univers works ?
27
-
===================
24
+
- When relating a known vulnerability or bug to a range of affected package
25
+
versions. For instance a statement such as "vulnerability 123 affects
26
+
package bar, version 3.1 and version 4.2 but not version 5" also defines a
27
+
range of affected bar versions.
28
28
29
-
Univers, can be considered as a wrapper around many version comparision libraries, each of which
30
-
solving the problem for the respective ecosystem. It delegates the actual comparision to these libraries
31
-
depending upon the ecosystem.
29
+
Existing tools support typically a single algorithm to parse and compare
30
+
versions and this is not accurate across different ecosystems, since each
31
+
follow different versioning rules. For example there's no concept of 'epoch' in
32
+
semver versioning as used in package types and ecosystem such as npm or
33
+
rubygems, but epochs do exist in debian versions. A tool designed for semver or
34
+
dpkg versions processing would not be able to handle correctly the other version
35
+
scheme.
32
36
37
+
univers is different and considers the ecosystem-specific version scheme used.
33
38
34
-
The supported ecosystems and underlying libraries are:
35
39
36
-
- npm, golang, php-composer, ruby-gems and others which follow the semver spec. These use `semantic_version <https://github.com/rbarrois/python-semanticversion>`_ library.
37
-
- debian, this is handled by `debian-inspector <https://github.com/sbs2001/univers/blob/main/src/univers/debian.py.ABOUT>`_ library.
38
-
- pypi, this is handled by Python's ``packaging.version`` module.
39
-
- maven, this is handled by `rpm_vercmp <https://github.com/sbs2001/univers/blob/main/src/univers/rpm.py.ABOUT>`_ library.
40
-
- ebuild/gentoo, this is handled by `gentoo_vercmp <https://github.com/sbs2001/univers/blob/main/src/univers/gentoo.py.ABOUT>`_ module.
40
+
How does univers work ?
41
+
=========================
42
+
43
+
univers wraps, embeds or implements multiple version comparision libraries, each
44
+
focused on specific ecosystem version scheme.
45
+
46
+
It also implements an experimental unified syntax for version ranges specifier
47
+
and can parse and convert existing version range strings to this unified syntax.
48
+
49
+
50
+
The supported package ecosystems versioning schemes and underlying libraries are:
51
+
52
+
- semver: npm, golang, PHP composer, rubygems and others that follow the semver
53
+
spec, using `semantic_version <https://github.com/rbarrois/python-semanticversion>`_ library.
0 commit comments