Skip to content

Commit c37aea7

Browse files
authored
Update Reproduciblity Readme (#423)
1 parent 23aca19 commit c37aea7

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

src/oss-reproducible/README.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,41 @@
11
# OSS Reproducible
22

3-
The purpose of *oss-reproducible* is to analyze open source packages for reproducibility. We start with
3+
The purpose of *oss-reproducible* is to analyze open source packages for `semantic reproducibility`. We start with
44
an existing package (for example, the NPM "left-pad" package, version 1.3.0), and we try to answer the
5-
question, **Do the package contents authentically reflect the purported source code?**
5+
question, **How accurately does the source code represent the published package?**
66

77
## Why Reproducibility?
8+
Reproducible builds allow confidence that packages are derived from the source code that produced them.
9+
10+
## Semantic Reproducibility
11+
A project build is `semantically reproducible` if its build results can be either recreated exactly (a bit for bit [reproducible build](https://en.wikipedia.org/wiki/Reproducible_builds)), or if the differences between the release package and a rebuilt package are not expected to produce functional differences in normal cases.
12+
13+
For example, the rebuilt package might have different date/time stamps, or one might include files like .gitignore that are not in the other and would not change the execution of a program under normal circumstances.
814

915
## How It Works
1016

1117
We start by downloading the package from the respective package repository, using OSS Download. Then
1218
we look for the source (using OSS Find Source) and try to find and download the correct version of it.
1319

14-
OSS Reproducible uses "strategies" to try to correlate source code with the package contents. These
20+
OSS Reproducible uses `strategies` to try to correlate source code with the package contents. These
1521
strategies include:
1622

17-
* PackageMatchesSourceStrategy: Do the package contents exactly match the source code repository
23+
* `PackageMatchesSourceStrategy`: Do the package contents exactly match the source code repository
1824
contents?
19-
* PackageContainedInSourceStragegy: Does every file in the package exist in the source code repository?
25+
* `PackageContainedInSourceStragegy`: Does every file in the package exist in the source code repository?
2026
Note that this is different from the previous strategy; for example, unit tests in the source repository
2127
that don't appear in the package would be fine for this strategy.
22-
* AutoBuildProducesSamePackage: Can we re-build the package from the source code repository? Since
28+
* `AutoBuildProducesSamePackage`: Can we re-build the package from the source code repository? Since
2329
there is a huge variety in build methods, this can very difficult, or in many cases, impossible.
24-
* OryxBuildStrategy: The Microsoft Oryx project has independent logic to attempt to "build" source
30+
* `OryxBuildStrategy`: The Microsoft Oryx project has independent logic to attempt to "build" source
2531
code repositories, so we leverage that as well.
2632

33+
OSS Reproducible calculates an estimate of the similarity between the published package from OSS-Download
34+
and the associated source code from OSS-Find-Source.
35+
2736
## Ignoring Files
2837

29-
Certain files are uninteresting from a reproducibility perspective, and are excluded from analyses.
38+
Certain files are uninteresting from a `semantic reproducibility` perspective and are excluded from analyses.
3039
These files are defined in Strategies/PackageIgnoreList.txt.
3140

3241
## Contributing to OSS Reproducible

src/oss-reproducible/ReproducibleTool.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static IEnumerable<Example> Examples
3434
get
3535
{
3636
return new List<Example>() {
37-
new Example("Checks reproducibility of the given package",
37+
new Example("Estimate semantic reproducibility of the given package",
3838
new Options { Targets = new List<string>() {"[options]", "package-url..." } })
3939
};
4040
}
@@ -105,7 +105,7 @@ public KeyValuePair<double, string> GetReproducibilityScore(ReproducibleToolResu
105105
{
106106
if (fullResult.Results == null)
107107
{
108-
return KeyValuePair.Create(0.0, "No reproducibility results were created.");
108+
return KeyValuePair.Create(0.0, "No semantic reproducibility results were created.");
109109
}
110110

111111
KeyValuePair<double, string> bestScore = KeyValuePair.Create(0.0, "No strategies were able to successfully derive the package from the source code.");

0 commit comments

Comments
 (0)