SON SSSC Report 2019 jun25.pdf
2019 State of the Software Supply Chain
The 5th annual report on global open source software development
presented by sonatype
in partnership with galois REVOLUTION
Table of Contents
Introduction 3 Infographic 4
CHAPTER 1: Global Supply of Open Source 5 1.1 Supply of Open Source is Massive 6 1.2 Supply of Open Source is Expanding Rapidly 7 1.3 Suppliers, Components and Releases 7
CHAPTER 2: Global Demand for Open Source 8 2.1 Accelerating Demand for Open Source Libraries 9 2.2 Automated Pipelines and DevOps Are Key Drivers 10
CHAPTER 3: Exemplary Project Teams 11 3.1 Research Goals 12 3.2 Time to Remediate Vulnerabilities 13 3.3 Time to Update Dependencies 15 3.4 Stale Dependencies 16 3.5 Exploring the Link Between MTTR and MTTU 16 3.6 Hypothesis Testing 18 3.7 Finding Different Behavioral Groups 22 3.8 Guidance for Open Source Project Owners and Contributors 24 3.9 Guidance for Enterprise Development Teams 24
CHAPTER 4: Exemplary Dev Teams 26 4.1 The Enterprise Continues to Accelerate 27 4.2 Analysis of 12,000 Large Enterprises 27 4.3 Component Releases Make Up 85% of a Modern Application 28 4.4 Characteristics of Exemplary Development Teams 29 4.5 Rewards for Exemplary Development Teams 34
CHAPTER 5: The Changing Landscape 35 5.1 Deming Emphasizes Building Quality In 36 5.2 Tracing Vulnerable Component Release Downloads Across Software Supply Chains 37 5.3 Adversaries Increasingly Target Open Source Components 38 5.4 Government and Industry Apply New Standards to Secure Software Development 42
Conclusion 44
Sources 45
Appendix A 46 Acknowledgments 46 About the Analysis 46
Appendix B 47
Appendix C 49
Appendix D 50
Introduction
Now in its fifth year, Sonatype's annual State of the Software Supply Chain Report examines the rapidly expanding supply and continued exponential growth in consumption of open source components. Our research also reveals best practices exhibited by exemplary open source software projects and exemplary commercial application development teams.
This year, for the first time, we’ve collaborated with research partners Gene Kim from IT Revolution and Dr. Stephen Magill, Principal Scientist at Galois and CEO of MuseDev, to objectively examine and empirically document, release patterns and hygiene practices across 36,000 open source project teams and 3.7 million open source releases.
Separately, we observed 12,000 commercial engineering teams to document their consumption of open source and third party libraries. We also conducted two surveys, with a combined participation of over 6,200 development professionals, to better understand the current state of DevSecOps and software supply chain management practices. We compared teams with, and without, automated open source governance capabilities (in an attempt) to reveal the baseline benefit of building applications that utilize higher quality open source components.
The 2019 State of the Software Supply Chain Report blends a broad set of public and proprietary data with survey results, expert research, and analysis to reveal the following:
► 75% growth in supply of open source component releases over the past two years (Chapter 1) ► 68% year over year growth in download requests from the Central Repository to 146 billion (Chapter 2) ► 18x faster median time to update dependencies for exemplary open source components (Chapter 3) ► 55% reduction in the use of vulnerable open source component releases within managed software supply chains (Chapter 4) ► 71% increase in confirmed or suspected open source related breaches since 2014 (Chapter 5)
At Sonatype, we’ve long been active contributors to, and maintainers of, numerous open source efforts, including Apache Maven and Nexus Repository Manager. Since 2005, we’ve curated and operated the Central Repository, which last year alone serviced 146 billion download requests for component releases from developers around the world. Commercially, our interest lies in helping developers and organizations accelerate innovation and minimize risk by continuously sourcing third-party libraries from the highest quality open source projects.
Together with our partners, we are proud to share this research. We hope that you find it valuable.
Exemplary Projects are 3.4x faster
at remediating known vulnerabilities pg. 29
in open source related breaches over the past five years
Secure Dev Practices are 9.3x more
71% increase
The top 5% of projects remediate security vulnerabilities
Exemplary Dev Teams are
146B
Java download requests
in 2018, represented a
10x more to schedule likely dependency updates pg. 29
likely pg. 29 to schedule
within 21 days
12x more likely
68% year over year growth pg. 9
JavaScript pg. 36
known security vulnerability pg. 38
of Java in open source related
313,000
average enterprise
downloads of OSS
components per year
pg. 27
55% reduction
in the use of vulnerable OSS component releases in automated environments pg. 34
releases in automated Exemplary
21,448 at updating environments
new open source pg. 13
downloads of Java
pg. 36
component releases have known vulnerabilities
21,448 new open source releases per day pg. 6
to have automated tools to manage open source dependenciespg. 31 pg. 42
51% of JavaScript components have a known security vulnerability pg. 37
PCI introduces new standards for development teams using open source components
CHAPTER 1
Global Supply
of Open Source A World of Infinite Choice
CHAPTER 1: GLOBAL SUPPLY OF OPEN SOURCE
1.1 Supply of Open
Source is Massive
There are now more than 3.7 million unique Java open source software component releases in the Central Repository, 800,000 unique JavaScript packages in npm, 1.2 million unique Python component releases housed in the PyPI repository, and 1.6 million .NET component releases in the NuGet 1 Gallery. There are also more than 2.2 million containerized applications housed in Docker Hub 2 — up from 900,000 the previous year.
This massive supply of software parts is rapidly and organically expanding due to constant innovations and regular versioning of existing
components. These new versions not only offer enhanced features, but also provide improved 3 performance, bug fixes, and security patches.
1.2 Supply of Open Source is Expanding Rapidly
Sonatype’s study across several open source component ecosystems reveals number of releases housed within public repositories increased from 16.6 million to 28.4 million from January 2018 through today. On average, developers had access to more than 21,448 new open source component releases every day, since the beginning of 2018.
KEY POINT
⊲⊲ On average, developers had access to more than 21,448 new open source component releases every day, since the beginning of 2018.
FIG. 1A OSS Component Growth from 2017 – 2019 OSS Component Growth from 2017-2019
CHAPTER 1: GLOBAL SUPPLY OF OPEN SOURCE
While Java components continue to dominate by sheer number of component releases available, package types like npm and crates.io demonstrated the highest growth rates. npm packages experienced 109% growth and now total 836,000 component releases. Newcomer crates.io (Rust) increased 213% during the period and now offers more than 25,000 component releases (see 4 FIGURE 1A).
Open source growth is robust across numerous ecosystems, but npm has grown particularly fast due to JavaScript’s emergence as a universal web application programming language. For JavaScript developers looking for a library, tool, or adapter, odds are very good that someone else has already created it and published it to npm where it can easily be borrowed. According to the stewards of the npm repository, “Every week roughly 160 people publish their first package in 5 the registry.”
New component versions are released for a variety of reasons, including supporting new functionality, fixing defects, or supporting a new API. New releases may also address non-feature-related concerns, such as improving performance, adding or updating their dependencies, or remediating security vulnerabilities.
Although brand new projects are constantly being created and introduced, growth in open source supply is driven mostly by new versions of existing projects being published. While the growth in supply fuels rapid innovation, it does pose
significant questions for organizations wanting to better manage their software supply chains:
⊲⊲ How often do projects publish new versions?
⊲⊲ Do certain projects release updates more frequently?
⊲⊲ Do other projects release updates less frequently?
⊲⊲ What are the implications?
⊲⊲ Who are the best component suppliers?
This year, State of the Software Supply Chain researchers set out to answer these questions and many more.
1.3 Suppliers, Components and Releases
To match terminology in the previous State of the Software Supply Chain reports and provide consistency across research findings, we will follow the Maven terminology using the following definitions:
⊲⊲ A supplier is a Maven Group (e.g., org.apache. httpcomponents)
⊲⊲ A component is a Maven Group and Artifact (e.g., org.apache.httpcomponents, httpclient)
⊲⊲ A component release is a specific Maven Group, Artifact and Version (e.g., org.apache. httpcomponents, httpclient, 4.5.6). For other ecosystems, we sometimes refer to releases as packages.
Fueling Rapid Innovation Consumption of open source is so vast that most organizations cannot identify how many components are entering into their software supply chains, how those components are flowing through development lifecycles, the relative quality and security of those components, or which components exist within production applications.
According to International Data Corporation (IDC), “there were 22.30 million software developers in the world at the outset of 2018. IDC estimated that 11.65 million are full-time developers, 6.35 million are part-time developers, and 4.30 million are 6 nonprofessional developers.” In 2018, developers around the world consumed hundreds of billions of open source software component releases.
CHAPTER 2
Global Demand
for Open Source Fueling Rapid Innovation
CHAPTER 2: GLOBAL DEMAND FOR OPEN SOURCE
2.1 Accelerating Demand for Open Source Libraries
The growing demand for innovation has accelerated implementations of automated software development pipelines while also driving open source consumption to new heights across all major ecosystems.
2.1.1 Demand for Java
In 2018, the aggregate number of download requests for Java component releases from the Central Repository grew 68% year over year to 146 billion. With an estimated 12 million Java developers 7 around the world, this equates to 12,166 per person.
2.1.2 Demand for JavaScript
While growth in demand for Java components
is remarkable, a view into JavaScript package
downloads demonstrates even greater growth in
developer demand. In 2018, average weekly npm
package downloads increased from approximately
8
3.5 billion to 10 billion — an increase of 185%. To
add further context, there are an estimated 9.7
million JavaScript developers in the world — meaning the average JavaScript developer is sourcing
1,030 packages per week or 53,608 packages per
9
year.
2.1.3 Others
Other public repositories have experienced similar levels of developer demand. For example, downloads of RubyGems packages have grown from 10 8 billion to 33 billion over the past three years. NuGet package downloads have increased from 756 million in 2015 to an annual run rate of 16.2 11 billion in 2019.
FIG. 2A Releases 2012 – 2018 Number of Download Requests for Java Component Releases 2012 – 2018
CHAPTER 2: GLOBAL DEMAND FOR OPEN SOURCE
A view into JavaScript component downloads demonstrates even greater growth in developer demand. In 2018, average weekly npm package downloads increased from approximately 3.5 billion to 10 billion — an increase of 185%.
2.2 Automated Pipelines and DevOps Are Key Drivers
Exponential growth in the consumption of open source component releases and containers is a proxy for the adoption of automated software development tools and DevOps pipelines. Automated tooling can generate hundreds or thousands of download requests per build.
In the context of software supply chain management, each download equates to a procurement effort by development teams. Each open source software component release is chosen from an OSS project that acts as a supplier to developers who assemble tens, hundreds, and sometimes thousands of component releases into a finished application.
SOURCE: NPM INC., LAURIE VOSS (@SELDO) FIG. 2B JavaScript Package Downloads, Rolling Weekly Average 2013 – 2019 SOURCE: NPM INC., LAURIE VOSS (@SELDO)
CHAPTER 3 Exemplary
Project Teams
Open Source Projects Are Not Created Equal
CHAPTER 3: EXEMPLARY PROJECT TEAMS
3.1 Research Goals
We wanted to better understand the health and habits of the open source component ecosystem, and how software developers choose which OSS components to use in their own projects. To do this, we studied all the Java artifacts stored in The Central Repository (often referred to as “Maven Central”). At the time of this writing, The Central Repository has over 266,000 unique components with over 3.7 million component releases.
The research set out to answer:
⊲⊲ Do differences exist in how effectively OSS projects update their dependencies and fix vulnerabilities? Are there exemplary components that do this better than others?
⊲⊲ Are exemplary components more widely-used than “non-exemplary” components?
⊲⊲ What factors correlate with exemplary components?
FIG. 3A Constructing the Study Dataset Constructing the Study Dataset (N = 36,203) (N = 36,203)
⊲⊲ What advice can be offered to producers of OSS components and the developers that consume them?
For the purpose of this study, we restricted our analysis to components that met six qualifying criteria (see FIGURE 3A), resulting in a data set of 36,203 components. Given this data set, we examined a number of attributes to measure responsiveness to security vulnerabilities and determine what properties exemplary component project teams shared. In addition to the security relevant attributes — described in the next section — the primary attributes tracked were:
Number of Dependencies: the maximum count of dependencies for any given component across all versions in the study period, as measured by the dependencies in the Maven pom.xml file.
N = 266,170 Components were published in The Central Repository.
Components had at least two version releases in the last five years.
N = 101,252
Components were part of the “open source software supply chain” (e.g., they are or they have a dependency).
N = 100,643
Components follow the Maven standard for versioning guidance. (e.g., correct use of numeric version strings, components separated by dots.)
Components have dependencies satisfying all of the above.
Components have updated a dependency at least once.
Stale Dependencies (fewer is better): the average percentage of out-of-date component dependencies (i.e., a newer version has been released) present when the component has a new release.
Release Period (shorter is better): average time in days each component version spends as the “current” release. A shorter average release period equates to more frequent releases.
Popularity: the average number of downloads per day from The Central Repository.
SCM Commits per Month: average number of commits to the GitHub repo per month — a measure of development activity (i.e., developer velocity).
CHAPTER 3: EXEMPLARY PROJECT TEAMS
Developer Team Size: as measured by the average number of unique developers committing each month.
Presence of Continuous Integration (CI): as measured by the detection of any CI-related configuration files in the source code repository (e.g., Travis, Jenkins, CircleCI, etc.).
Support Type: support for the component comes from an open source foundation, a commercial organization, or is not officially supported by any organization (e.g., a personal project).
To gather these attributes, we augmented the data as follows:
KEY POINTS as follows:
12 ⊲⊲ CHAOSS: using the perceval utility to gather GitHub commit data, we gathered the number of commits per month for twelve months, as well as the number of unique developers committing during each month.
against their dependencies. during each month.
13 ⊲⊲ Libraries.io: using this dataset, we were able to gather the number of GitHub stars, forks, and pull requests.
14 ⊲⊲ Sonatype Nexus IQ Server: using Sonatype data, we are able to gather vulnerability information and a derived component popularity score (based on how frequently components are seen by the Nexus IQ repository scanning service).
3.2 Time to Remediate
Vulnerabilities
The first outcome metric we focused on was time to remediate (TTR). TTR is the time required for a component team to remediate any security vulnerabilities reported against their dependencies. For a vulnerable dependency, remediation occurs when it is upgraded to a new version that fixes the vulnerability. We combined data on component updates with data on vulnerabilities, and tagged
updates as security relevant if there was a known vulnerability targeting the old version at the time the new version was released. We then measure mean time to remediate (MTTR) as the average time required for a component to adopt security relevant updates to dependencies.
Note that the TTR clock starts when a component version fixing a vulnerability is released. Specifically, the TTR clock is not started when the vulnerability is reported or published; early efforts used vulnerability publish times from various sources as the TTR starting time led to many problems. For example, responsible disclosure often delays the publishing of the vulnerability until developers have released a fixed component version, or vulnerabilities may have CVE numbers associated with the date they were reserved rather than published. These factors make it difficult to obtain precise dates of when component teams were advised of vulnerabilities. On the other hand, data on which components fixed a known vulnerability with a new version release is widespread and much more reliable.
For developers wanting to use more secure components, those exhibiting faster MTTR are desirable. FIGURE 3B (we cropped the x-axis at the 95th percentile) shows a histogram of MTTR across all components, demonstrating the long tail of components that apply security updates very slowly, often years after they are released. We observed:
⊲⊲ In the study, 47% of components — after releasing a new version — had a vulnerability discovered in one of its dependencies, during the period in which that version was current. (N = 36,203)
⊲⊲ The median TTR was 180 days (similar to numbers reported in previous versions of the State of the Software Supply Chain Report). The top 5% of components remediated vulnerabilities within 21 days.
KEY POINTS
⊲⊲ TTR is the time required for a component team to remediate any security vulnerabilities reported against their dependencies.
⊲⊲ For developers wanting to use more secure components, those exhibiting faster MTTR are desirable.
⊲⊲ In the study, 47% of components — after releasing a new version — had a vulnerability discovered in one of its dependencies, during the period in which that version was current.
a vulnerability discovered in one of desirable.
CHAPTER 3: EXEMPLARY PROJECT TEAMS
FIG. 3B (cumulative percentage) Mean and Median Time to Remediate Vulnerabilities (cumulative percentage)
SOURCE: 2019 STATE OF THE SOFTWARE SUPPLY CHAIN REPORT
Days to Remediate Vulnerability
⊲⊲ The TTR has an extremely “long tail” — the 95% percentile occurs at 1,302 days (3.5 years), with the maximum TTR at 3,388 days (9.3 years). The mean of the TTR is 326 days.
⊲⊲ 59% of components have had at least one non-up-to-date and known vulnerable dependency at the time of release (e.g., a newer dependency was available that fixed a known vulnerability).
During the period studied, many components had to remediate a security vulnerability caused by a dependency, but over half of the sample
set did not have vulnerabilities in any of their direct dependencies. Furthermore, we focused further study on components that were published on GitHub, where we could gather developer activity metrics. When we restrict the population to GitHub-hosted components, the portion that had to deal with a security-relevant dependency update dropped to 16%. In other words, our TTR data set was much smaller than our component data set. This, combined with the hypothesized correlation between median time to update (MTTU) and MTTR, motivated us to look at MTTU as a primary project health metric.
KEY POINTS
⊲⊲ 59% of components have released at least one version that contained a dependency with a known vulnerability.
⊲⊲ Over half of the sample set did not have vulnerabilities in any of their direct dependencies.
CHAPTER 3: EXEMPLARY PROJECT TEAMS
3.3 Time to Update
Dependencies
To enable a broader analysis of dependency update hygiene, we defined a time to update (TTU) attribute for all components in our dataset.
For each component in our data set, we constructed the dependency graph of the set of components (and their versions) that each component release depends on.
Then for the given period, for every component, whenever a new version of one of its dependencies was released, we measured the time required for the component to update to the newer dependency. We then computed the median of all those time to update data points to obtain the MTTU metric.
FIGURE 3C shows three of our key metrics — time to update (TTU), time to remediate (TTR), and stale dependencies. Suppose:
⊲⊲ Component C depends on Component A and B.
⊲⊲ Component B (version 2.2) has a vulnerability published against it that is fixed in version 2.3.
⊲⊲ The release of B (version 2.3) starts the Component C TTR and TTU clock.
⊲⊲ When Component C updates Component B from version 2.3 to 2.4, the clock stops and we record the TTR and TTU.
project speculates that “only the TTR and TTU.
⊲⊲ Since the release of A (version 2.4) is not security relevant (no vulnerability known against A), upgrading this component only contributes to TTU.
⊲⊲ When C (version 2.2) is released it is using an old version of A (2.2 rather than 2.3); this causes A to be regarded as a stale dependency for the release of C.
Timeline Demonstrating Stale FIG. 3C Timeline Demonstrating Dependencies, Time to Update (TTU), and Time to Remediate (TTR)Stale Dependencies, Time To Update (TTU), and Time To Remediate (TTR)
There are several reasons we suspected that MTTU would be an effective indicator of MTTR performance. One of the most important was phrased by Jeremy Long, founder of the OWASP Dependency Check project who recommends the best security patching strategy is to remain current on all dependencies. Long speculates that “only 25% of organizations report vulnerabilities to users, and only 10% of vulnerabilities are reported as Common 15 Vulnerabilities and Exposures (CVE).” Furthermore, the publication of a CVE is often for a vulnerability that was fixed in an earlier version of a component.
As an example, Long cites a security vulnerability discovered in PrimeFaces — a Java UI framework. The PrimeFaces project became aware of the vulnerability and fixed it in February 2016. A CVE for this vulnerability (CVE-2017-1000486) was subsequently assigned in 2017. Then, the CVE was published into the national catalogue on
KEY POINT
⊲⊲ Jeremy Long, founder of the OWASP Dependency Check project speculates that “only 25% of organizations report vulnerabilities to users, and only 10% of vulnerabilities are reported as Common Vulnerabilities and Exposures (CVE).”
CHAPTER 3: EXEMPLARY PROJECT TEAMS
January 3, 2018. Upon the publication of the CVE, crypto-miners actively started exploiting vulnerable versions of the component. Developers who made a practice of updating to the latest released versions of PrimeFaces were less at risk than developers who relied upon publication of a CVE to trigger remediation efforts.
To summarize:
⊲⊲ MTTU data was derivable for all components, whereas MTTR data is more sparse. (N=36,203 for MTTU vs. N = 16,997 for MTTR).
⊲⊲ Fast MTTU makes it more likely that components are already protected when new CVEs are published.
⊲⊲ There is a general sense in the security community that “having better security” is achieved by better technical practices. In this case, better practices means integrating updated dependencies into the daily work of the development team.
We therefore explored TTU in our population to better understand how effectively component teams were updating their dependencies.
3.4 Stale Dependencies
Almost every developer has updated their dependencies only to discover that it introduced breaking changes: either compile-time failures, or worse, run-time errors because the dependency functionality has changed. Because of these situations, updating dependencies and patching vulnerabilities becomes an arduous and painful activity, which often leads to developments becoming so behind in updates that upgrading will surely break application functionality (see the survey results in Chapter 4).
To capture the distinction between “fully up to date” and the more conservative “within one version of up to date,” we introduced an attribute
called stale dependency percentage. This measures the percentage of dependencies, on average, which are not fully up to date when a component releases a new version. In other words, a component that always releases with all their dependencies up to date will have a perfect stale dependency ratio of 0%.
Projects that stick to the “bleeding edge” of using the latest N or N-1 dependencies will have fast MTTU and a low stale dependency ratio. Projects that tend to stay one version behind will have relatively fast MTTU, but high stale dependency ratio. Projects that do not update frequently will have even slower MTTU and higher stale dependency ratios.
One of the papers we were inspired by was Why 16 and How Java Developers Break APIs that monitored 400 Java libraries for 116 days, and found 282 commits that were breaking changes. Not all of these were in the released components, but it shows that the risk of breaking changes is real, and potentially introduces a huge economic cost of staying current with OSS components.
3.5 Exploring the Link
Between MTTR and MTTU
Across the entire population, the adoption curve for upgrading dependencies and remediating vulnerabilities are similar, as shown in FIGURE 3D. When comparing MTTR with MTTU for non-security-relevant updates on a per-component basis, we see a correlation between update behavior for security relevant updates (MTTR) and non-security-relevant updates (Pearson correlation¹⁷ was 0.6 with N = 17,017). In all, 55% of components had values for MTTR and non-security-relevant MTTU that were within 20% of each other.
KEY POINTS
⊲⊲ Fast MTTU makes it more likely that components are already protected when new CVEs are published.
⊲⊲ We introduced an attribute called stale dependency percentage.
⊲⊲ 400 Java libraries were monitored for 116 days. Researchers found 282 commits that were breaking changes.
⊲⊲ When comparing MTTR with MTTU for non-security-relevant updates on a per-component basis, we see a correlation between update behavior for security relevant updates (MTTR) and non-security- relevant updates.
CHAPTER 3: EXEMPLARY PROJECT TEAMS
Time to Remediate (TTR) vs. Time to Update (TTU) FIG. 3D Time to Remediate (TTR) vs. Time to Update (TTU) (cumulative percentage) (cumulative percentage)
SOURCE: 2019 STATE OF THE SOFTWARE SUPPLY CHAIN REPORT
Days to Update
However, we saw a group of components that focused much more on upgrading vulnerable dependencies than applying other updates — achieving good security outcomes while ignoring (deliberately or accidentally) other component updates. The analysis found that 15% of components have a better than average MTTR, while having below average MTTU for non-security relevant updates.
In general, developers staying up to date on dependencies will also stay up to date on security updates, because security updates are a subset of
general updates. We observed that many teams follow this practice, exhibiting very similar MTTR and MTTU values. To replicate this practice, security managers can improve vulnerability updating practices by partnering with their development manager counterparts to improve their general dependency management practices.
Over several months, we came up with a series of hypotheses of what factors might be associated with better upgrade hygiene (i.e., faster MTTU and
3.6 Hypothesis Testing
In general, developers staying up to date on dependencies will also stay up to date on security updates, because security updates are a subset of general updates.
CHAPTER 3: EXEMPLARY PROJECT TEAMS
FIG. 3E Correlation Between Security-Relevant and Non-Security-Relevant Update Times Correlation Between Security-Relevant and
MTTR). Some of the factors included: number of dependencies, developer commit frequency, number of active developers, continuous integration (CI) usage, and component popularity. We hoped to find specific behaviors associated with exemplary component teams and outcomes. This could provide guidance for other component teams (component producers), and provide developers (consumers in the software supply chain) with a list of attributes to look for in OSS components.
To perform this analysis, we combined our dataset with statistics on development behaviors collected from GitHub via the CHAOSS project’s Perceval tool. Since not all components are hosted on GitHub, this reduced our dataset size to 10,573 components.
KEY POINT
⊲⊲ Over several months, we came up with a series of hypotheses of what factors might be associated with better upgrade hygiene (i.e., faster MTTU and MTTR).
CHAPTER 3: EXEMPLARY PROJECT TEAMS
Our primary hypotheses were:
1. Popularity: More popular components will have better update hygiene, due to the pressure to stay secure when a component is widely used.
2. Number of Dependencies: Components with fewer dependencies will have better update hygiene, as it is easier to keep current with fewer dependencies.
3. Size of Team: Large development teams will have better update hygiene.
4. Development Activity: Components that release faster or commit more frequently will have better update hygiene.
5. Use of Continuous Integration: Projects that used continuous integration would have better update hygiene.
6. Institutional Support: Components that are supported by an open source foundation or commercial entity will have better update hygiene, due to having more resources.
While we found evidence for hypotheses 3 and 4, and weak evidence of 5, the most interesting results were the hypotheses that we could not confirm (1 and 2). For each of our hypotheses regarding component attributes that would be associated with faster MTTU, we obtained the following results.
3.6.1 Popularity
QUESTION: Do popular projects, as measured by The Central Repository downloads, have better MTTU?
FINDINGS: No. When deciding to choose components to use in a development project, popularity is often used as a proxy for quality (i.e., “everyone
else is using it, so it must be safe, secure, and reliable”). Across the entire population studied, analysis showed popularity did not correlate with fast MTTU (Pearson correlation coefficient of -0.07, 18 Kendall Tau of -0.1). Even when our researchers selected the most popular components (e.g., the top 10 or 20 percent of components by popularity) and compared their MTTU to the rest of the population, no statistically significant differences in MTTU were found.
3.6.2 Number of Dependencies
QUESTION: Do fewer dependencies correlate with faster MTTU?
FINDINGS: No. We had expected components with fewer dependencies to have better MTTU. One would expect that the difficulty of keeping dependencies up to date should grow as the number of dependencies grow. However, our analysis found very little correlation (Pearson = -0.09). What little correlation there was showed that components with larger dependency counts having slightly faster TTU.
Even more surprising, the analysis showed that components with the most dependencies (i.e., the top 10%) had 39% faster TTU (p = 1.2e-29 on Mann-Whitney U test¹⁹) than the rest of the population. They also had 18% larger development teams than the rest of the population, and this ratio grows as the number of dependencies increase (e.g., at the 95th percentile, the teams were 23% larger). The top 10% by dependency count had 4.8 times more dependencies on average than the bottom 90% and yet had 39% faster TTU. This led us to investigate further the connection between number of dependencies and size of development team. FIGURE 3F shows the plot of number of dependencies versus
average size of development team (smoothed over a sliding window of 10 data points).
We were surprised and delighted to find that fast TTU is possible even with large numbers of dependencies. It was particularly interesting that the size of the development team tends to increase as the number of dependencies increases, bringing up an interesting question of causation: when development teams grow, does each developer bring in their favorite dependencies, adding to the dependency count? Or is it that as a project grows, new functionality requires new dependencies, which increase the workload, which requires bringing in new developers. These are questions that we hope to address in a future study.
KEY POINTS
⊲⊲ Across the entire population studied, analysis showed popularity did not correlate with fast MTTU.
⊲⊲ The top 10% by dependency count had 4.8 times more dependencies on average than the bottom 90% and yet had 39% faster TTU.
⊲⊲ Fast TTU is possible even with large numbers of dependencies.
CHAPTER 3: EXEMPLARY PROJECT TEAMS
3.6.3 Size of Development Team
QUESTION: Do components with more active developers correlate with faster MTTU?
FINDINGS: Yes. Selecting directly for size of development team reveals that across all projects, the top 20% of teams by size (11 or more developers contributing per month) have 50% faster MTTU and release 2.6 times more frequently. They are also 37% more likely to be foundation supported. All results are statistically significant (Mann-Whitney U test) and these trends hold for the top 15% and 10% of teams as well (13 and 16 developers involved per month respectively).
3.6.4 Development
Activity and Velocity
5 3.6.4 Development 4 QUESTION: Do components with higher
QUESTION: Do components with higher release frequency and higher monthly commits correlate with faster MTTU?
FINDINGS: Yes. Clearly, high development activity has the potential to enable a project to stay more up to date. In particular, a project cannot update dependencies without releasing a new version. Therefore, frequent releases are generally required for fast MTTU of dependencies. However it is also possible to spend development effort solely on new features, bug fixes, etc., and ignore dependency management. Furthermore, development and release velocity have been shown to be highly predictive of project outcomes as noted in the 2018 20 Accelerate: State of DevOps Report. While we cannot determine causation, we found correlations that match these prior results — the top 20% of teams by commits per month had 26% faster MTTU and 83% faster release frequency. Release frequency itself is strongly correlated with MTTU (Pearson correlation of 0.48). This was the strongest
More Dependencies Correlate with Larger Development Teams FIG. 3F More Dependencies Correlate with Larger Development Teams (smoothed) (smoothed) SOURCE: 2019 STATE OF THE SOFTWARE SUPPLY CHAIN REPORT
KEY POINTS
⊲⊲ The top 20% of teams by size (11 or more developers contributing per month) have 50% faster MTTU and release 2.6 times more frequently.
⊲⊲ The top 20% of teams by commits per month had 26% faster MTTU and 83% faster release frequency. This was the strongest correlation we found among the attributes we considered.
⊲⊲ The top 20% of projects by release frequency have 2.3 times faster TTU on average.
CHAPTER 3: EXEMPLARY PROJECT TEAMS
correlation we found among the attributes we considered. The top 20% of projects by release frequency have 2.3 times faster TTU on average.
3.6.5 Use of Continuous Integration
QUESTION: Does the use of continuous integration correlate with faster MTTU?
FINDINGS: No. We were surprised that continuous integration (CI) did not correlate with MTTU. CI was used in the release processes for 68.3% of the components we studied. Usage of CI across all the groups were similar, +/-5%. We speculate that perhaps CI adoption is widespread enough, and that expectations of submitting automated tests with contributed code is high enough, that it is now a mandatory practice for any OSS components.
Because we scanned for the presence of CI configuration files in the source code repository, we were able to establish which tools they used. Of the 7,682 repositories, 90.1% were using TravisCI.
3.6.6 Institutional Support
QUESTION: Is a project supported by an open source foundation or by a commercial entity correlated with faster MTTU?
FINDINGS: Yes and no. We hypothesized that the additional resources available to commercially or foundation-supported projects would generally enable better performance. We based commercial support on group IDs that begin with “com,” and foundation support on group IDs associated with multiple components. To improve the labeling, researchers filtered out manually identified outliers such as “com.github,” “org.eclipse,” and “org.webjars,” which all host and aggregate components developed by other groups.
18x such as “com.github,” “org.eclipse,” and “org.web-
The analysis revealed that Foundation-supported projects had 7.4% faster MTTU in general (p = 0.0002), where researchers also observed highly significant differences in team size (32% larger) and commit frequency (77% faster). By comparison, Commercial projects had 8% slower MTTU (p = 0.0001) and 29% slower commit frequency.
KEY POINTS
⊲⊲ We were surprised that continuous integration did not correlate with MTTU.
⊲⊲ Foundation-supported projects had 7.4% faster MTTU in general (p = 0.0002), where researchers also observed highly significant differences in team size (32% larger) and commit frequency (77% faster).
2x more frequent releases
33% larger development teams
FIG. 3G Exemplary Development Teams Differentiate Through These Six Performance Metrics
6.8x better at fully updating dependencies
4x more likely to be managed by open source foundations
18x faster MTTU
6x more popular by download count
CHAPTER 3: EXEMPLARY PROJECT TEAMS
3.7 Finding Different
Behavioral Groups
Based on what we learned from our hypothesis testing regarding trends in team composition and performance, we examined five sub-populations of the data to characterize differences in approach to open source software development. The identification and characterization of the sub-populations was driven by a combination of automated clustering, domain, and attribute knowledge gained from the hypothesis testing.
3.7.1 Exemplars
We defined Exemplars to be those teams in the fastest 20% by MTTU, and in the best (lowest) 20% by stale dependency count. Exemplars demonstrate statistically significant differences as compared to the rest of the data set in the following attributes:
⊲⊲ 18x faster MTTU
⊲⊲ 6.8x better at releasing components where all dependencies are up to date
⊲⊲ 6x more popular (as measured by average monthly The Central Repository download counts)
⊲⊲ 2x more frequent component releases
⊲⊲ 33% larger development teams
⊲⊲ 4x more likely to be managed by open source foundations than by commercial stewards
Within the Exemplars, there were two groups with significantly different development team sizes:
3.7.1.1 LARGE EXEMPLARS
Large exemplary teams (top 50% by size, with an average of 8.9 developers committing code on at least a monthly basis), commit code frequently, release frequently, and do an excellent job of
managing their dependencies. We can see the effect of open source foundation support in this group, as 91% of these projects are associated with an open source foundation.
3.7.1.2 SMALL EXEMPLARS
The smallest 50% of exemplary teams by number of developers have an average of less than two developers, but still manage to run popular, widely used, and high quality projects. However small in team size, they still update dependencies 14 times faster than the rest of the population and stay fastidiously up to date (91% of dependencies are brought up to date with each release).
3.7.2 Laggards
KEY POINTS 20% by stale dependency count. Exemplars
The teams in the bottom 20% in MTTU and stale dependencies are the furthest behind in terms of update hygiene. These teams release infrequently (around twice each year) and take on average almost two years to adopt updates to dependencies. Almost all of their dependencies (98% on average) are out of date, even after a new release. They are generally less popular (downloaded as often as other projects on average). However there are 67 projects in this group that are among the top 10% most downloaded projects from The Central Repository.
3.7.2.1 FEATURES FIRST LAGGARDS
These teams release frequently (top 50%) but otherwise fall into the Laggard category (bottom 20% MTTU and stale dependencies). They have larger than average (29% larger) development teams, but do not prioritize upgrading dependencies. They release a new version every 50 days on average but take an average of 603 days to upgrade dependencies when new versions are released. As a result, 96% of dependencies are out of date
at release time. This was a small group, with 2.6% of the population exhibiting this behavior.
3.7.3 Cautious Teams
We checked to see how many teams were in the top 50% with respect to MTTU, but the bottom 20% with respect to stale dependencies. These teams maintain better-than-median update cadence, yet do not immediately adopt new versions of dependencies, choosing instead to wait a few months before moving to a new dependency release. This was not a sizable group, with only 4% of our dataset falling into this category.
continues on page 24
KEY POINTS
⊲⊲ 91% of Large Exemplars are associated with an open source foundation.
⊲⊲ Small Exemplars update dependen- cies 14 times faster than the rest of the population and stay fastidiously up to date (91% of dependencies are brought up to date with each release).
⊲⊲ For Laggards, almost all of their dependencies (98% on average) are out of date, even after a new release.
⊲⊲ Features First release a new version every 50 days on average but take an average of 603 days to upgrade dependencies when new versions are released.
⊲⊲ Cautious teams do not immediately adopt new versions of dependen- cies, choosing instead to wait a few months before moving to a new dependency release.
Cluster Popularity and Release Speed
FIG. 3H Cluster Popularity and Release Speed
SOURCE: 2019 STATE OF THE SOFTWARE SUPPLY CHAIN REPORT
7Popularity 10 trends up as release speedLarge Exemplars
increases. Exemplars tendSmall Exemplars 6 to be more 10 popular. A few popular Features First Laggards. but Features First on the whole tend to be fairly they are less Laggards MORE POPULAR popular, despite popular. 5poor update 10hygiene. Cautious
None of the Above
4 10
3 10
2 10
Popularity (Maven Central Downloads)1
10
0 10
-1 10 LESS POPULAR RELEASES FREQUENTLY RELEASES SELDOMLY
Average Days Between Releases
2019 STATE OF THE SOFTWARE SUPPLY CHAIN REPORT
CHAPTER 3: EXEMPLARY PROJECT TEAMS
3.8 Guidance for Open Source
Project Owners and Contributors
Given its association with good security practices and outcomes, we recommend a focus on accelerating and maintaining rapid MTTU. In addition to investing development effort on new features, bug fixes, etc., projects should commit similar resources to dependency management. This means that developers maintaining OSS projects who are considering adding a new dependency, and looking for a metric to guide that choice, would do well to focus on those dependencies with fast MTTU. Since remediating a vulnerable dependency typically involves upgrading to a new dependency version, components with fast TTU values naturally exhibit faster response to dependency vulnerabilities.
To progress comfortably into the status of Exemplar (top 80% of Exemplars), teams should aim for a minimum of four releases annually, and aim to upgrade at least 80% of their dependencies with every release. A higher frequency of dependency updates statistically results in higher quality and more secure code.
3.9 Guidance for Enterprise
Development Teams
Enterprise development teams working with software supply chains often rely on an unchecked variety of supply from OSS projects where each developer or development team can make their own sourcing and procurement decisions. The
effort of managing 2,778 different projects and 8,200 unique releases (SEE SECTION 4.2.1) can introduce significant drag on development and is contrary to an enterprise’s need to develop faster as part of any agile, continuous delivery or DevOps practice.
Choosing open source projects should be considered an important strategic decision for enterprise software development organizations. Different components demonstrate healthy or poor performance that impacts the overall quality of their releases. Therefore, MTTU should be an important metric when deciding which components to utilize within your software supply chains. Rapid MTTU is associated with lower security risk and is also more accessible from public sources than other metrics enterprises might want to rely upon such as vulnerability data.
Just as traditional manufacturing supply chains intentionally select parts from approved suppliers and rely upon formalized procurement practices — enterprise development teams should adopt similar criteria for their selection of OSS components. This practice ensures the highest quality parts are selected from the best and fewest suppliers — a practice Deming recommended for decades. Implementing selection criteria and update practices will not only improve quality, but can accelerate mean time to repair when suppliers discover new defects or vulnerabilities. Chapter 4 will further explore the impact of OSS component selection on overall application quality.
KEY POINTS
⊲⊲ We recommend projects focus on accelerating and maintaining rapid MTTU.
⊲⊲ Teams should aim for a minimum of four releases annually, and aim to upgrade at least 80% of their dependencies with every release.
CHAPTER 3: EXEMPLARY PROJECT TEAMS
FIG. 3I The Exemplars: Components Demonstrating the Fastest MTTU and Lowest Stale Dependency Counts
Truncated: for complete list, see Appendix D, page 50
»» bz.tsung.android:objectify
»» com.ahome-it:ahome-tooling-server-core
»» com.amazon.device.tools.build:builder
»» com.amazon.device.tools.build:gradle
»» com.amazon.device.tools.lint:lint-checks
»» com.github.japgolly.fork. scalaz:scalaz-concurrent_sjs0.5_2.11
»» com.github.japgolly.fork. scalaz:scalaz-xml_sjs0.5_2.11
»» com.github.japgolly.fork. scalaz:scalaz-iterv_sjs0.5_2.11
»» com.github.japgolly.fork. scalaz:scalaz-core_sjs0.5_2.11
»» com.aranea-apps.android.libs:android-rest
»» com.ariht:config-generation-maven-plugin
»» com.arasthel:swissknife
»» com.asayama.docs.gwt.angular:gwt-angular-pages
»» com.asayama.gwt:gwt-util
»» com.asayama.gwt.angular:gwt-angular-resources
»» com.asayama.gwt.angular:gwt-angular-masonry
»» com.asayama.gwt.angular:gwt-angular-http
»» com.asayama.gwt.angular:gwt-angular-user
»» com.asayama.gwt.angular:gwt-angular-ng
»» com.asayama.gwt.angular:gwt-angular-prettify
»» com.asayama.gwt.bootstrap:gwt-bootstrap
»» com.asayama.gwt.jquery:gwt-jquery
»» com.autoscout24.gradle:gradle-monkey-plugin
»» com.automattic:elasticsearch-statsd
»» com.damnhandy:handy-uri-templates
»» com.badlogicgames.gdx:gdx-backend-robovm
»» com.badlogicgames.gdx:gdx-backend-lwjgl
»» com.badlogicgames.gdxpay: gdx-pay-android-googleplay
»» com.badlogicgames.gdxpay:gdx-pay
»» com.erinors:xtend-ioc-core
»» com.bartoszlipinski:parsemodel-compiler
»» com.bazaarvoice.dropwizard: dropwizard-webjars-bundle
»» com.bazaarvoice.dropwizard: dropwizard-configurable-assets-bundle
»» com.github.advantageous:qbit-spring
»» com.github.advantageous:qbit-consul-client
»» com.github.advantageous:qbit-eventbus-replicator
»» com.github.advantageous:qbit-vertx
»» com.github.advantageous:qbit-service-discovery
»» com.github.advantageous:qbit-test-support
»» com.github.advantageous:qbit-admin
»» com.github.advantageous:qbit-core
»» com.github.advantageous:qbit-servlet
»» com.github.almondtools:rexlex
»» com.github.akarnokd:ixjava
»» com.github.andreptb:fitnesse-selenium-slim
»» com.github.andrewoma.kommon:kommon
»» com.github.andrewoma.kwery:fetcher
»» com.github.andrewoma.kwery:core
»» com.github.andrewoma.kwery:transactional
»» com.github.andrewoma.kwery:mapper
»» com.github.aro-tech:tdd-mixins-core
»» com.github.aro-tech:extended-mockito
»» com.github.ben-manes.caffeine:guava
»» com.github.chandu0101.
scalajs-react-components:macros_sjs0.6_2.11
»» com.github.czyzby:gdx-lml
»» com.github.danielgindi:helpers
»» com.github.davidmoten:bigsort
»» com.github.dblock:oshi-core
»» com.github.davidmoten:rxjava-extras
»» com.github.ddth:ddth-osgikafka
»» com.github.ddth:ddth-zookeeper
»» com.github.dnvriend:akka-persistence-jdbc_2.10
»» com.github.fbertola:mother-docker
»» com.github.doctoror.rxcursorloader:library
»» com.github.finagle:finch-oauth2_2.10
»» com.github.finagle:finch-demo_2.11
»» com.github.fracpete:screencast4j-weka-package
»» com.github.gabrielemariotti.cards:library-extra
»» com.github.heuermh. adamexamples:adam-examples_2.11
»» com.github.heuermh.adamplugins:adam-plugins
»» com.github.heuermh. adamplugins:adam-plugins_2.11
»» com.github.j-fischer:rest-on-fire
»» com.github.heuermh. adamplugins:adam-plugins_2.10
»» com.github.jsurfer:jsurfer-simple
»» com.github.jinahya:simple-file-back
»» com.github.joschi:dropwizard-elasticsearch
»» com.github.jszczepankiewicz:dynks
»» com.github.jsonld-java:jsonld-java-sesame
»» com.github.jodersky:flow_2.11
»» com.github.kentyeh:sd4j
»» com.github.kzwang:elasticsearch-osem
»» com.github.kzwang:elasticsearch-river-dynamodb
»» com.github.jtakakura:gradle-robovm-plugin
»» com.github.kzwang:elasticsearch-transport-redis
»» com.github.mhshams:core
»» com.github.kzwang:elasticsearch-repository-gridfs
» » com.giffing.wicket.spring.boot. » » com.github.advantageous:qbit-core
»» com.github.mictaege:doozer
wso2-api-publisher-plugin
»» com.github.michaelruocco:
»» com.github.nkzawa:engine.io-client
»» com.github.oscerd:camel-cassandra
»» com.github.nwillc:contracts
»» com.github.pengrad:java-telegram-bot-api
»» com.github.persapiens:jsf-undertow- spring-boot-starter
»» com.github.persapiens:jsf-undertow- bootsfaces-spring-boot-starter
»» com.github.persapiens:jsf-jetty-bootsfaces- spring-boot-starter
»» com.github.pwittchen:reactivenetwork
»» com.github.pwittchen:reactivebeacons
»» com.github.ratrecommends:gdx-utils
» » com.mailosaur:mailosaur-java scalaz:scalaz-iterv_sjs0.5_2.11 » » com.pengyifan.bioc:pengyifan-bioc » » com.github.japgolly.fork. » » com.cloudhopper:ch-smpp scalaz:scalaz-core_sjs0.5_2.11 » » com.cocosw:framework » » com.aranea-apps.android.libs:android-rest » » com.codeborne:selenide » » com.ariht:config-generation-maven-plugin » » com.codebullets.saga-lib:saga-lib-guice » » com.arasthel:swissknife » » com.dimafeng:testcontainers-scala » » com.asayama.gwt:gwt-util » » com.redowlanalytics: » » com.asayama.gwt.angular:gwt-angular-resources » » com.rtstatistics:api-client » » com.asayama.gwt.angular:gwt-angular-http » » com.craterdog. » » com.asayama.gwt.angular:gwt-angular-user
»» com.github.richard-ballard:arbee-test-utils
»» com.github.richard-ballard:arbee-utils
»» com.github.salomonbrys.kodein:kodein
»» com.github.salomonbrys.kodein:kodein-android
»» com.github.scala-blitz:scala-blitz_2.11
»» com.bladecoder.engine:blade-engine-spine-plugin
»» com.bladecoder.engine:blade-engine
»» com.bladejava:blade-jetbrick
»» com.bloidonia:groovy-stream
»» com.github.sd4324530:fastweixin
»» com.github.seratch:ltsv4s_2.11
»» com.github.seratch:scalikesolr_2.10
»» com.github.seratch:jslack
»» com.github.sogyf:goja-qrcode
»» com.github.sv244:torrentstream-android
»» com.braintreepayments.api:braintree
»» com.braintreepayments.api:braintree-api
»» com.github.sviperll:metachicory
»» com.github.sviperll:adt4j-core
»» com.github.thomasnield:rxkotlinfx
»» com.github.tibolte:agendacalendarview
»» com.github.tkurz.sesame:vocab-builder-cli
»» com.github.tkurz. sesame:vocab-builder-maven-plugin
»» com.github.triceo.splitlog:splitlog-core
»» com.github.vmironov.
jetpack:jetpack-bindings-arguments
»» com.github.webdriverextensions: webdriverextensions
»» com.github.wnameless:smartcard-reader
»» com.github.xuwei-k:httpz-scalaj_2.11
»» com.github.xuwei-k:msgpack4z-java07
»» com.github.xuwei-k:play23scalacheck111_2.11
»» com.github.xuwei-k:applybuilder71_2.11
»» com.github.xuwei-k:msgpack4z-java
»» com.github.xuwei-k:play23scalaz71_2.11
»» com.github.xuwei-k:play23scalaz70_2.11
»» com.github.xuwei-k:play-twenty-three_2.11
»» com.digitalpebble:storm-crawler-tika
»» com.digitalpebble:storm-crawler
»» com.cedarsoft.commons:configuration
»» com.pengyifan.bioc:pengyifan-bioc
»» com.cedarsoft.commons.history:core
»» com.mailosaur:mailosaur-java
»» com.cloudhopper:ch-smpp
»» com.cocosw:framework
»» com.codeborne:selenide
»» com.dimafeng:testcontainers-scala
»» com.puppycrawl.tools:checkstyle
»» com.codebullets.saga-lib:saga-lib-guice
»» com.redowlanalytics:
»» com.craterdog.
swagger2markup-maven-plugin
»» com.rtstatistics:api-client
java-security-framework:java-digital-notary-api
»» com.cyngn.vertx:vertx-kafka
»» com.valchkou.datastax:cassandra-driver-mapping
»» com.ea.orbit:orbit-rest-client
»» com.ea.orbit:orbit-actors-redis
»» com.ea.orbit:orbit-actors-spring
»» com.eharmony:aloha-vw-jni
»» com.englishtown.vertx:vertx-httpservlet
»» com.englishtown.vertx:vertx-zookeeper
»» com.englishtown.vertx:vertx-guice
»» com.englishtown.vertx:vertx-when
»» info.cukes:cucumber-picocontainer
»» com.erudika:para-dao-cassandra
»» com.eventsourcing:eventsourcing-core
» » com.englishtown.vertx:vertx-when gdx-pay-android-googleplay » » info.cukes:cucumber-picocontainer » » com.badlogicgames.gdxpay:gdx-pay » » com.erudika:para-dao-cassandra » » com.erinors:xtend-ioc-core » » com.evernote:android-sdk » » com.bazaarvoice.dropwizard: » » com.facebook.presto:presto-cli » » com.bazaarvoice.dropwizard: » » com.facebook.presto:presto-orc dropwizard-configurable-assets-bundle
»» com.evernote:android-sdk
»» com.facebook.presto:presto-teradata-functions
»» com.facebook.presto:presto-cli
»» com.facebook.presto:presto-orc
»» com.facebook.presto:presto-blackhole »» com.facebook.presto:presto-server
»» com.floragunn:search-guard-5
»» com.floragunn:search-guard-ssl
» » com.floragunn:search-guard-ssl » » com.github.advantageous:qbit-vertx
»» com.flozano.statsd-netty:statsd-netty
»» com.gabrielittner.auto.value:auto-value-cursor
»» com.getbase.android.autoprovider:library
»» com.giffing.wicket.spring.boot. starter:wicket-spring-boot-starter-example
»» de.leanovate.doby:doby_2.11
CHAPTER 4
Exemplary Dev Teams
Benefits of DevSecOps and Automated Open Source Governance
CHAPTER 4: EXEMPLARY DEV TEAMS
4.1 The Enterprise
Continues to Accelerate
Software innovation has become the last path to differentiation in most competitive industries. Companies must transform their approach to digital innovation or face loss of market share. There is $2 trillion spent annually in software development, but most is labor-oriented and there is a growing need to automate more of the software development process. Thus, exemplary engineering teams are embracing DevOps practices and automated tools to manage third-party dependencies and minimize open source risk.
Forty-seven percent of development teams now 21 deploy to production multiple times a week. Furthermore, DORA’s 2018 State of DevOps Report provides strong evidence that organizations adopting DevOps practices are experiencing remarkable results, including:
⊲⊲ DevOps teams deploy code 46x more frequently — meaning they deploy multiple times per day instead of once a week or less.
⊲⊲ DevOps teams have a 7x lower change failure rate — meaning changes to production fail 7.5% of the time instead of 38.5%.
⊲⊲ High performing DevOps teams are 1.75x more likely to extensively use open source software and 1.5 times more likely to expand open source 22 usage in the future.
In order to survive and thrive in today’s application economy the best development teams are actively embracing open source innovation, dependency management practices, and automated tooling for open source governance.
4.2 Analysis of 12,000
Large Enterprises
This year’s research analyzed the Java open source consumption patterns of 12,000 enterprise development teams to understand average consumption patterns, the diversity of OSS components they relied upon and the number of releases of those projects they consumed. Open source component release download patterns were observed for calendar year 2018. Downloads were observed across enterprises representing 173 countries.
4.2.1 Analysis of Open
Source Downloads
Source Downloads Forty-seven percent of development teams now
QUESTIONS: How many component releases are downloaded by companies each year? How many OSS projects and releases are represented?
FINDINGS: In 2018, the average enterprise downloaded 313,000 open source component releases — representing an increase of 84% year over year.
On a country-by-country basis, downloads patterns revealed interesting variation. For example, the average organization in Germany downloaded 436,000 component releases, followed by France with 324,000, the United States with 309,000, and the United Kingdom with 248,000 downloads.
For the study population, downloads represented an average of 2,778 open source components, including 8,200 unique component releases. This means the enterprises consumes an average of three releases per component. One the high end, 243 (2%) organizations used over almost five (4.61) release versions. On the low end, 1,470 (12%) organizations averaged below two (1.82) release versions.
KEY POINTS
⊲⊲ There is $2 trillion spent annually in software development, but most is labor-oriented and there is a growing need to automate more of the software development process.
⊲⊲ In 2018, the average enterprise downloaded 313,000 open source component releases.
CHAPTER 4: EXEMPLARY DEV TEAMS
KEY POINTS downloads via repository managers totaled 5.3%
Modern Application (compared to 1.8% globally).
Researchers noted that it is not uncommon to see downloads of 50 – 60 versions of a specific project over the year long observation period.
4.2.2 Utilization of Repository Managers
QUESTION: How frequently are repository managers used in the download process?
FINDINGS: Software developers doubled their use of repository managers in 2018 as they sought more efficient and higher velocity practices for OSS consumption. Over 9 million developers now use repository managers as part of their develop- 23 ment tool set. Even as the number of repository manager instances grow, their use as a primary download path within development teams has not reached significant levels. Across the 12,000 organizations analyzed, component release downloads via repository managers totaled 5.3% (compared to 1.8% globally).
By contrast, 305 (3%) of the 12,000 organizations demonstrated high utilization of repository managers for more than 50% of their downloads. This group was utilizing repository managers 14.2 times more on average the other organizations observed.
via Repository Managers FIG. 4A Percentage of Downloads (12K Organizations Analyzed)
via Repository Managers (12K Organizations Analyzed)
Repository managers not only accelerate the development process by caching component releases locally, but they also can be used to limit the number of paths releases can travel to make their way into an enterprise. Limiting the number of paths is one of the first steps toward controlling and auditing software supply chain behaviors for an enterprise.
305 organizations use a repository manager for 50-100% of downloads.
750 organizations use a repository manager for 10-19% of downloads.
10,363
organizations use a
repository manager
for less than 10%
of downloads.
4.3 Component Releases Make Up 85% of a Modern Application
Open source components are pervasive in software development today. An analysis of over 500 applications revealed the average application contains over 460 software component releases, of which 85% were open source. In the same study, it was not uncommon to see applications assembled from 2,000 – 4,000 OSS component releases.
In JavaScript development, the number of npm packages per application is even greater. According to npm.org, “the average modern web application has over 1,000 modules, and trees of over 2,000 modules are not uncommon. In fact, 97% of the code in a modern web application comes from packages downloaded from the npm repository. An individual developer is responsible only for the final 3% that makes their application 24 unique and useful.”
application comes from packages an enterprise.
KEY POINTS
⊲⊲ Across the 12,000 organizations analyzed, component release downloads via repository managers totaled 5.3%
⊲⊲ The Exemplars were utilizing repository managers 14.2 times more on average the other organizations observed.
⊲⊲ An analysis of over 500 applications revealed the average application contains over 460 software component releases, of which 85% were open source.
⊲⊲ 97% of the code in a modern web application comes from packages downloaded from the npm repository.
CHAPTER 4: EXEMPLARY DEV TEAMS
As development teams strive to deploy new software faster, the practice of assembling open source component releases into the form of an application screams of efficiency. Developers no longer need to code every line from scratch. Developers can download component releases in seconds that deliver new capabilities, built by experts outside of their organizations who make their code freely available to others.
While component use proliferates every development organization today, management of components in these organizations varies considerably. The best organizations follow software supply chain management principles to ensure the best quality component releases are assembled into their applications.
4.4 Characteristics of Exemplary
Development Teams
Jeremy Long, founder of the OWASP Dependency Check project once shared, “Good development teams consider out-of-date libraries a code quality issue. They build time into their schedule to upgrade their dependencies. On the other hand, development teams who do not do this regularly 25 are often afraid to break their build.”
When it comes to software development, exemplary teams are more likely to embrace the following patterns and practices when it comes to open source dependency updates.
4.4.1 Dependency Update
Behaviors for Developers
In order to better understand the practices surrounding open source components within development, this year’s researchers surveyed 658 developers in April 2019. The developers
were asked to describe their organization’s practices as well as to describe their feelings of how those practices impacted their productivity and enjoyment of work.
Researchers performed an analysis of all the respondent answers and three distinct clusters emerged. Broadly speaking, the clusters demonstrated high, medium, and low (29.3%, 48.6%, and 22.0% of respondents, respectively) degrees of reported pain associated with updating dependencies and patching. Researchers then compared the high and low pain clusters to determine what percentage of respondents answered “strongly agree” to the survey questions. Stark differences were found between them (SEE FIGURE 4B).
4.4.1.1 UPDATING OPEN
SOURCE DEPENDENCIES
4.4 Characteristics of Exemplary SOURCE DEPENDENCIES
QUESTION: Is updating dependencies scheduled as part of your daily work?
FINDINGS: Researchers found that 38% of the developers surveyed updated dependencies as part of their daily work, yet Exemplars were 10x more likely to schedule dependency updates as part of their daily work.
4.4.1.2 USING THE LATEST
VERSIONS OF DEPENDENCIES
QUESTION: Do you strive to use the latest version (or latest-N) of all your dependencies?
FINDINGS: From the overall survey population, 46% of developers strove to use the latest version of all of their open source dependencies. Further analysis revealed that Exemplars were 6.2x more likely to use the latest version (or latest-N) of all of their dependencies.
Using the latest versions of dependencies is its own reward. As noted previously in Chapter 3, Exemplar components demonstrated 3.4 times faster MTTR and were 27% more likely to already be protected when new vulnerabilities were discovered.
Then, as will be revealed below in section 4.5, teams using the latest component releases can reduce the presence of vulnerable component releases in their applications by 55%. Therefore, development teams that simultaneously incorporate the latest versions of component releases and procure them from exemplary open source projects can improve the overall quality of their applications.
continues on page 31
KEY POINTS
⊲⊲ Jeremy Long, founder of the OWASP Dependency Check project once shared, “Good development teams consider out-of-date libraries a code quality issue. They build time into their schedule to upgrade their dependencies.”
⊲⊲ Exemplars are 10x more likely to schedule dependency updates as part of their daily work.
⊲⊲ Exemplars are 6.2x more likely to use the latest version (or latest-N) of all their dependencies.
⊲⊲ Exemplar components demonstrated 3.4 times faster MTTR and were 27% more likely to already be protected when new vulnerabilities were discovered.
EXEMPLARS:
3.2x less likely to consider updating “painful.”
FIG. 4B Traits of Exemplary
2.6x less likely to consider updating Development Teams vulnerable component releases “painful.”
Traits of Exemplary Development Teams
Have automated tools to track, manage, and/or ensure policy
compliance of dependencies.
EXEMPLARS: 12x more likely
Have a process to proactively remove problematic or
unused dependencies. EXEMPLARS: 9.3x more likely
Use some process to add a new dependency (e.g., evaluate,
approve, standardize, etc.)
EXEMPLARS: 11x more likely
Strive to use the latest version (or latest-N) of all dependencies.
EXEMPLARS: 6.2x more likely
Schedule update dependencies as part of daily work.
EXEMPLARS: 10x more likely
2019 STATE OF THE SOFTWARE SUPPLY CHAIN REPORT
CHAPTER 4: EXEMPLARY DEV TEAMS
4.4.1.3 USING PROCESSES TO ADD A NEW DEPENDENCY
QUESTION: Do you use some process to add a new dependency (e.g., evaluate, approve, standardize, etc.)?
FINDINGS: From the overall survey population, 50% of developers said they relied on some process to add a new open source dependency. When examining the Exemplar cluster, researchers found them to be 11x more likely to have a process in place to add a new dependency (e.g., evaluate, approve, standardize, etc.).
4.4.1.4 PROACTIVELY REMOVING DEPENDENCIES
QUESTION: Do you have a process to proactively remove problematic or unused dependencies?
FINDINGS: When it came to removing problematic component releases (e.g., those with security vulnerabilities), only 30% admitted to having a process in place. Exemplars were 9.3x more likely to proactively remove problematic or unused dependencies.
4.4.1.5 USING AUTOMATION TO MANAGE DEPENDENCIES
QUESTION: Do you have automated tools to track, manage, and/or ensure policy compliance of your dependencies?
dependencies to be “painful.” compliance of your dependencies?
FINDINGS: Use of automated solutions can expedite dependency management. This year’s survey revealed 37% of the overall population relied on automation to manage dependencies. A closer look at Exemplars demonstrated that they were 12x more likely to have automated tools to track, manage, and/or ensure policy compliance of their dependencies.
4.4.1.6 CHARACTERIZING THE EFFORT TO UPDATE DEPENDENCIES
QUESTION: Do you consider updating dependencies painful?
FINDINGS: Updating dependencies is not a favorite past time of developers. In the overall survey population, 51% of developers agreed that updating was considered painful. The benefit of applying processes and updating to the latest versions of dependencies paid off for the Exemplars. Researchers found Exemplars to be 3.2x less likely to consider updating dependencies to be “painful.”
4.4.1.7 CHARACTERIZING THE EFFORT TO UPDATE VULNERABLE COMPONENTS
QUESTION: Do you consider updating vulnerable component releases to be painful?
FINDINGS: In the survey, 52% reported the practice of updating vulnerable component releases as “painful.” Again, the benefit of applying processes, updating to the latest N-versions, and regularly removing problematic dependencies paid off for the Exemplars. Exemplars surveyed were 2.6x less likely to consider updating vulnerable components to be “painful.”
4.4.2 Component Management in the Enterprise
This year, our researchers surveyed 5,558 development and DevOps professionals as part of the 2019 DevSecOps Community Survey. Survey participants were asked to self identify their DevOps maturity level into different categories, where three clusters emerged. Broadly speaking, there were those with high levels of DevOps maturity, those with improving maturity, and those with low maturity or no DevOps practice.
Stark differences emerged between the high maturity (Exemplar) and low maturity (No DevOps) clusters as they responded to questions about open source component controls, policies, and breaches as seen across the following practices.
KEY POINTS
⊲⊲ When examining the Exemplar cluster, researchers found them to be 11x more likely to have a process in place to add a new dependency.
⊲⊲ Exemplars were 9.3x more likely to proactively remove problematic or unused dependencies.
⊲⊲ A closer look at Exemplars demonstrated that they were 12x more likely to have automated tools to track, manage, and/or ensure policy compliance of our dependencies.
ensure policy compliance of our to be “painful.”
⊲⊲ Researchers found Exemplars to be 3.2x less likely to consider updating dependencies to be “painful.”
⊲⊲ Exemplars surveyed were 2.6x less likely to consider updating vulnerable components to be “painful.”
CHAPTER 4: EXEMPLARY DEV TEAMS
4.4.2.1 GENERATION OF A SOFTWARE
BILL OF MATERIALS (SBOM)
QUESTION: Does your organization keep a complete SBOM?
FINDINGS: More rigorous control of open source component releases used in development and operations leads to the use of a Software Bill of Materials (SBOM). SBOMs are used to track and trace which open source component releases have been assembled into an application. The survey revealed that only 53% of Exemplars keep a com- 26 plete software bill of materials. When paired with vulnerability data about the components, SBOMs can be used to quickly identify where defective component releases have been used in applications — whether under development or in production, thereby accelerating remediation efforts.
4.4.2.2 CONTROLLING OPEN
SOURCE USED IN DEVELOPMENT
QUESTION: How well does your organization control which open source component releases are used in development?
FINDINGS: 2019 saw more organizations investing in controls that start with keeping an inventory of all component releases used. When asked how well their organizations controlled which open source component releases were used in development, 74% of Exemplars in DevOps practices remarked that their organization was “completely locked down” or had “some standards” in place. By contrast, 48% of developers in organizations without a DevOps practice claimed to have “no 27 standards” in place.
4.4.2.3 EMBRACEMENT OF AUTOMATED TOOLS TO ENFORCE COMPLIANCE AND INFORM DEVELOPERS
QUESTION: Does your organization have an open source policy and do you follow it?
FINDINGS: The survey revealed that 57% of organizations have an open source governance policy 28 in place. These organizations rely on policies supported by a mix of formal documentation, OSS governance committees, automated tooling, and tribal knowledge.
The survey also revealed that automation had a significant impact on whether or not open source policies were followed. In Exemplars DevOps practices where more automated OSS governance solutions have been deployed, 62% of developers
Adoption of a Software Adoption of a Software Adoption of Open Source FIG. 4C Adoption of a Bill of Materials (SBOM) Bill of Materials (SBOM) Software Bill of Materials
Adoption of Open Source Adoption of Open Source Governance Policies Governance Policies Governance Policies
KEY POINTS
SOURCE: 2019 DEVSECOPS COMMUNITY SURVEY (SONATYPE)
⊲⊲ 74% of Exemplars in DevOps practices remarked that standards were in place for controlling use of open source components.
⊲⊲ The survey revealed that only 53% of Exemplars keep a complete software bill of materials.
⊲⊲ 57% of organizations have an open source governance policy in place.
CHAPTER 4: EXEMPLARY DEV TEAMS
remarked that their organization had a policy and that it was followed. By comparison, developers in organizations with little to no DevOps practices, only 25% of their developers were aware of and followed the policy. When automation of OSS policies 29 is present, developer adherence is 150% stronger.
4.4.2.4 INFORMING DEVELOPERS OF SECURITY RELATED ISSUES
QUESTION: How are you informed of InfoSec and AppSec issues?
FINDINGS: One of the reasons why adherence is stronger in exemplary organizations is that OSS component attributes (e.g., version numbers, vulnerability information, license descriptions) and policy information are delivered inside developer tooling. For developers in Exemplars DevOps practices, 63% are informed of application security issues from within their own development tools — meaning they don’t have to leave their common tool sets to receive alerts and information.
Developers inside exemplary teams were 62% more likely to receive notice of application security issues from within their tool sets compared to developers with little to no DevOps practice in 30 place.
KEY POINTS
AVG: 15.5% present, developer adherence is 150%
⊲⊲ When automation of OSS policies is present, developer adherence is 150% stronger.
⊲⊲ For developers in Exemplars in DevOps practices, 63% are informed of application security issues from within their own development tools.
FIG. 4D Age of Components Used in Managed Software Supply Chains Age of Components Used in Managed Software Supply Chains (Analysis of Java Components Across 68,000 Applications) (Analysis of Java Components Across 68,000 Applications) Age of Components Used in Managed Software Supply Chains
Percentage of Components FIG. 4E Percentage of Components with Known Vulnerabilities with Known Vulnerabilities Percentage of Components with Known Vulnerabilities
less than 3 years old have 65% Components less than 3 years fewer known vulnerabilities. old have 65% fewer known vulnerabilities.
vulnerabilities. old have 65% with Known Vulnerabilities
fewer known with Known Vulnerabilities
CHAPTER 4: EXEMPLARY DEV TEAMS
4.5 Rewards for Exemplary
Development Teams
Development teams who regularly update their open source dependencies and manage their software supply chains can dramatically reduce their risk exposure from the use of vulnerable component releases. For 2019, researchers performed an extensive analysis of open source component releases used in managed and unmanaged supply chains.
The first set of analyses focused on managed software supply chains. The team looked at open source component releases that were used within 85,000 applications. Analysis of the Java open source component releases revealed the latest versions had the lowest percentage of known defects. Component releases under three
years in age reflected security defect rates of 9.3% — representing 45% of OSS parts used in the applications.
Researchers also evaluated older component releases used within managed software supply chains. Analysis reveals that component releases over three years in age demonstrated security defect rates at 15.3% — or 65% higher defect rates compared to the newer component. The older component releases represented 55% of the parts used within managed software supply chains.
The second set of analyses focused on unmanaged software supply chains where automated open source governance solutions were not present. The average application assembled within this set revealed a security defect rate of 21%. While researchers were not able to assess the age of
in Unmanaged vs. Managed Supply Chains FIG. 4F Proportion of Vulnerable Components in Unmanaged vs. Managed Supply Chains
20.7%
of component releases are vulnerable within applications in unmanaged supply chains
component releases across the population, defect rates here were 40 – 100% higher when compared to components used within managed software supply chains.
Managed supply chains make better software. For organizations who tamed their supply chains, the rewards were impressive: use of known vulnerable component releases was reduced by 55%.
KEY POINTS
⊲⊲ Component releases under three years in age reflected security defect rates of 9.3%.
⊲⊲ Analysis reveals that component releases over three years in age demonstrated security defect rates at 15.3%.
⊲⊲ Applications in unmanaged software supply chains revealed security defect rates of 21%.
⊲⊲ For organizations who tamed their supply chains, the rewards were impressive: use of known vulnerable component releases was reduced by 55%.
9.3%
of component releases are vulnerable within applications in managed supply chains
CHAPTER 5
The Changing Landscape
Vulnerabilities, Adversaries, and Government Influence
CHAPTER 5: THE CHANGING LANDSCAPE
5.1 Deming Emphasizes Building Quality In
In 1945, W. Edwards Deming started advising Japanese manufacturers to detect and fix defects at the beginning of the manufacturing process. By the 1960s, Deming’s TQM practices were an intrinsic part of the Japanese culture and were playing rise to their global dominance. Now tied into high-performance production processes, six-sigma manufacturing today aims a defect rate 31 goal of 3.4 parts per million.
Following on the lessons of Deming, Jez Humble and Dave Farley, in their seminal book Continuous Delivery (2010), advised development teams to “build quality in.” Further echoing those remarks three years later, Gene Kim advised readers to “emphasize performance of the entire system and never pass a defect downstream” as he introduced “the three ways of DevOps” inside The Phoenix Project.
These recommendations would come to form the basis for the DevSecOps movement: release faster, build quality into your applications, and automate security controls with minimal friction.
In order to survive and thrive in today’s application economy the best development teams are actively pursuing open source fueled innovations, DevSecOps transformations, and
automation-based controls of component releases flowing through their software supply chains.
To better understand how defective and known vulnerable component releases flow through software supply chains, we first have to look at public open source repositories. In general, a public repository is created to serve components for a given development language. For example, Python, Java, JavaScript, Ruby, and Rust components are all served from repositories specific to their development language.
KEY POINT
⊲⊲ Now tied into high-performance production processes, six-sigma manufacturing today aims a defect rate goal of 3.4 parts per million.
SOURCE: SONATYPEFIG 5A The Percentage of Vulnerable Java Components Downloaded Over Four Years
CHAPTER 5: THE CHANGING LANDSCAPE
5.2 Tracing Vulnerable
Component Release Downloads
Across Software Supply Chains
Public open source repositories are immutable by design. This means, any given public repository is the home to all good (and bad) versions of open source component releases. When new vulnerabilities are discovered in component releases, open source projects cannot simply remove the defective component release from the repository, and for good reason. In order for developers to remediate a vulnerable component release, they need access to the defective component release. They first rebuild the application to its original state using the defective version, and replace the vulnerable component release with the safe version.
5.2.1 Mutuum Cavete
(Borrower Beware)
It is important to understand that no metadata about a component release downloaded from the public repositories is made available to developers by default (e.g., known security vulnerabilities, release age, observed licenses, interoperability changes, etc.).
Without sufficient due diligence by developers on their component release selections, a vulnerable component download behaves exactly like a safe download. Over the past five years that Sonatype has been tracking downloads from the Central Repository for this report, the percentage of vulnerable Java component releases consumed has ebbed and flowed. In 2018, across billions of open source component release downloads, 1 in 10 (10.3%) had known security vulnerabilities.
This represents a slight decrease from 2017’s peak of 12.1% (1 in 8) but when considered as a quality
benchmark for managed supply chains it falls far short of expectations. As mentioned earlier, six sigma manufacturing goals aim for defect rates of 3.4 parts per million. At today’s defect rate of 1 in 10 downloads, software component releases procured by development teams now sit at one sigma.
Poor hygiene practices are also well documented within the JavaScript community. In a 2018 npm survey of over 33,000 worldwide developers, 83% expressed concern about whether the open source software they use is secure (up from 77% in 2017), and 58% believe that there aren’t satisfactory methods for evaluating whether code 32 is safe. Furthermore, an October 2018 report from npm revealed that 51% of JavaScript package downloads contained known vulnerabilities. Eleven percent (11%) of the downloaded component releases analyzed were rated critical and 35% 33 demonstrated high vulnerability ratings.
At the next stop along the software supply chain, researchers analyzed downloads to repository managers. Analysis of downloads to Nexus and Artifactory repository managers (i.e., the local warehouses of software supply chains) by development teams reveals that 7.5% were known vulnerable. Once cached in a private, local repository manager, the component release can be served an unlimited number of times to developers within that enterprise.
5.2.2 A Faustian Bargain?
The capabilities that make open source libraries so attractive to development organizations, also make them risky. While component releases are free for developers to download, they are not created equal, and all of them have a cost with respect to maintenance over time.
FIG 5B Half of JavaScript Half of JavaScript Package Downloads Package Downloads Contain Contain Known Vulnerabilities Known Vulnerabilities SOURCE: NPM QUICK AUDIT (4M SCANS PER WEEK) SOURCE: NPM QUICK AUDIT (4M SCANS PER WEEK)
KEY POINTS
⊲⊲ In 2018, across billions of open source component release downloads, 1 in 10 (10.3%) had known security vulnerabilities.
⊲⊲ At today’s defect rate of 1 in 10 downloads, software component releases procured by development teams now sit at one sigma.
⊲⊲ 51% of JavaScript package downloads contained known vulnerabilities.
CHAPTER 5: THE CHANGING LANDSCAPE
FIG 5C Suspected or Verified Open Source Related Breaches Over Four Years Suspected or Verified Open Source Related Breaches Over Four Years SOURCE: DEVSECOPS COMMUNITY SURVEY (SONATYPE) SOURCE: DEVSECOPS COMMUNITY SURVEY (SONATYPE)
Our study of 12,000 enterprise software development organizations revealed average annual component release downloads of 313,000. Further analysis of those downloads reveals that 27,704 (8.8%) included at least one known security vulnerabilities. Just as well, not all security vulnerabilities are created equal. Of the 27,704 vulnerable downloads, 67% had Common Vulnerability Scoring System (CVSS) at 7.0 or above on a 10 point scale. Thirty percent (30%) had CVSS scores above 9.0 on a 10 point scale.
Minor fluctuations in the percentage of vulnerable download were seen on a country by country basis: United States (8.9%), France (8.8%), United Kingdom (8.8%), and Germany (8.1%).
5.3 Adversaries
Increasingly Target Open
Source Components
The 2019 DevSecOps Community Survey of 5,558 development professionals, highlighted a 71% increase in confirmed or suspected open source related breaches since 2014 (the same year the 34 notorious OpenSSL Heartbleed vulnerability).
The percentage of open source related breaches dropped 7% compared to the 2018 survey responses. The slight decline in breaches between the two surveys may be attributed to improved open source hygiene and investments made by some organizations following the Equifax breach
KEY POINTS
⊲⊲ Further analysis of downloads in one study revealed that 8.8% included at least one known security vulnerabilities.
⊲⊲ Minor fluctuations in the percentage of vulnerable download were seen on a country by country basis: United States (8.9%), France (8.8%), United Kingdom (8.8%), and Germany (8.1%).
⊲⊲ The 2019 DevSecOps Community Survey highlighted a 71% increase in confirmed or suspected open source related breaches since 2014.
CHAPTER 5: THE CHANGING LANDSCAPE
— made public in late 2017. Still, with 1 in 4 survey participants in this year’s reporting breaches in the past 12 months — breaches remain at epidemic 35 levels.
5.3.1 A Post-Equifax Look at Apache Struts Vulnerabilities
According to Fortinet’s Q4’2018 Threat Report, vulnerable instances of Apache Struts remain the most prevalent exploit. “Demonstrating that the internet never forgets, the Apache Struts exploit
(associated with CVE-2017-5638) has been a top detection since its role in the infamous Equifax breach back in 2017. More recently, attackers have been using this exploit as a way to implement cryp- 36 to-jacking functions on compromised machines.”
Even more alarming is the trend in elective downloads of vulnerable Struts component releases. According to Sonatype's analysis of Struts downloads from the Central Repository, the volume of monthly vulnerable downloads continued to increase following its link to the breach at Equifax.
KEY POINT
⊲⊲ One year after the breach announcement, monthly vulnerable Struts downloads had increased 11% to 2.1 million.
FIG 5D Vulnerable Struts Download Counts January 2017 – November 2018 SOURCE: SONATYPE Vulnerable Struts Download Counts January 2017 – November 2018
CHAPTER 5: THE CHANGING LANDSCAPE
One year after the breach announcement, monthly vulnerable Struts downloads had increased 11% to 2.1 million.
5.3.2 Event-Stream: Malicious Code
Injection Targeting Cryptocurrency
In the 2018 State of the Software Supply Chain Report, we advised that adversaries had compressed the time between vulnerability announcement and exploit from 45 to 3 days. In some instances, by injecting malicious code into open source projects on the supply side, time to exploit was further reduced to zero.
Such was the case with the socially engineered code injection for the JavaScript npm package known as event-stream in November 2018. The injection of malicious code into event-stream was accomplished when its developer unwittingly handed his credentials to an adversary who offered to take over maintenance responsibilities. The npm 37 package is downloaded 2 million times per week.
Further investigation of this exploit determined it was targeted as a CoPay’s Bitcoin wallet and “designed to harvest account details and private keys from accounts having a balance of more than 38 100 Bitcoin or 1000 Bitcoin Cash.”
5.3.3 Bootstrap-Sass: Malicious
Injection of a Back Door
Bootstrap-sass is an open source framework that enables web designers to quickly build a site. With over 28 million downloads through March 2019, it 39 is extremely popular among developers.
On March 27 of this year, Derek Barnes, a software developer whose code relied on the popular Ruby Gems bootstrap-sass component had a build fail. Suspicious, Derek decided to do some research
Over the past two years, a dangerous new trend has emerged. Adversaries are taking advantage of a new attack vector where they are directly injecting vulnerabilities into open source project releases and container images.
and noticed that “someone” had removed a version of the library (Bootstrap-Sass v3.2.0.2) and immediately released a new version, moments later, v3.2.0.3. He was suspicious why “someone” would modify the library on RubyGems — but not in GitHub, where the library's source code is managed. What Barnes uncovered was sobering: another attack on open source and the software supply chain that underpins so much of modern 40 innovation.
Alarmed by the abnormal release, he alerted the project which led to a backdoor being discovered in the code. The malicious component version (3.2.0.3) was then removed from the RubyGems repository — and the Bootstrap-Sass team revoked access to RubyGems for the developer whose account they believed was compromised and used to push the malicious code.
Before being noticed, the vulnerable version of bootstrap-sass was downloaded over 1,400 41 times.
5.3.4 Agama Malicious Code Injection
In June 2019, the npm, Inc. security team, in collaboration with Komodo, helped protect over $13 million USD in cryptocurrency assets by finding and responding to a malicious code injection vulnerability targeting the users of a cryptocurrency wallet called Agama. The attack focused on getting
a malicious package into the build chain for Agama and stealing the wallet seeds and other login passphrases used within the application. According to npm, “the attack was carried out by using a pattern that is becoming more and more popular; publishing a ‘useful’ package (electron-native-notify) to npm, waiting until it was in use by the target, and 42 then updating it to include a malicious payload.”
5.3.5 Two Years of Malicious Code Injection
The mechanics to the bootstrap, event stream, and electron-native-notify attacks are tricky and yet effective.
While limited in scope, the potential impact of similar attacks through a very popular component can be far-reaching and immediate. When malicious code is injected into software supply chains, adversaries can attack immediately after the code is deployed.
Over the past two years, a dangerous new trend has emerged. Specifically, a series of 16 events triangulate a serious escalation of software supply chain attacks. Adversaries are taking advantage of a new attack vector where they are directly injecting vulnerabilities into open source project releases and container images (see FIGURE 5E).
CHAPTER 5: THE CHANGING LANDSCAPE
FIG 5E A Shifting Battlefront of Attacks: Malicious Code Injection July 2017 – June 2019
npm credentials published online.
Affects access to 14% of the npm repo (79,000 packages).
Malicious npm pack- aged typosquated.
40 packages harvested over two weeks, collecting credentials used to publish to the npm repository itself.
docker123321 images created on Docker Hub.
Later accused of poisoning a Kubernetes honeypot (Jan 2018), and equated to a crypto-mining botnet (May 2018).
“I’m harvesting credit card numbers and passwords from your site. Here’s how.”
David Gilbertson writes a fictional tale on his blog about creating a malicious npm package.
npm credentials intentionally compromised.
npm credentials aged typosquated.
Back-doored Gems “I’m harvesting
package discovered. and passwords a core contributor
PyPI typosquat: 10 malicious Python packages found.
A malicious version of a package from a core contributor to the conventionalchangelog ecosystem is published. The package was installed 28,000 times in 35 hours and executed a Monero crypto miner.
Evidence of the fake packages being incorporated into software was noted multiple times between June and Sept 2017.
Linux distro hacked on GitHub.
Unknown individuals gain control of the Github Gentoo organization, and modified the content of repositories as well as pages within. All code considered compromised.
Back-doored PyPI package discovered.
Homebrew repository compromised.
Deleted go-bindata account resurrected by an unknown user.
After a developer deleted their GitHub account, someone immediately grabbed the ID — inheriting the karma instilled in that id and calling into question packages and sources.
Python module ssh-decorator backdoored to enable theft of private ssh keys.
Accessed in under 30 minutes through an exposed GitHub API token.
Back-doored npm package discovered.
package discovered. JavaScript package
Back-doored Gems bootstrap-sass RCE package discovered.
npm security team responds to reports of a malicious back door in the get-cookies module, published in March. Despite being deprecated, mailparser still receives about 64,000 weekly downloads.
A malicious version of the popular bootstrap-sass package, downloaded a total of 28 million times to date, and with 1.6K dependencies, is published to the RubyGems repository.
Compromised JavaScript package caught stealing npm credentials.
A hacker gains access to a developer’s npm account and injects malicious code into a popular JavaScript library called eslint-scope, a sub-module of the more famous ESLint, a JavaScript code analysis toolkit.
Malicious package injected into event- stream, a popular npm package.
The injected code targets the Copay application and was designed to harvest account details and private keys from accounts having a balance of more than 100 Bitcoin or 1,000 Bitcoin Cash.
Cryptocurrency attack via malicious code injection.
Malicious code targets users of a cryptocurrency wallet called Agama, focusing on getting into the build chain and stealing the wallet seeds and other login passphrases used within the application.
CHAPTER 5: THE CHANGING LANDSCAPE
5.4 Government and Industry
Apply New Standards to Secure
Software Development
While Exemplars are reducing the use of known vulnerable open source component releases in the development application, this does not exonerate them from duties to manage components over time. Secure software practices extend from early development through the active life of an application in the market.
With an ever increasing number of application breaches occurring, standards bodies and government are stepping in to hold development organizations accountable for the quality and security of code they assemble and develop.
5.4.1 New PCI Secure Software
Development Standards
In January 2019, the Payment Card Industry Security Standards Council introduced important new standards for software development:
43 ⊲⊲ PCI Secure Software Standards, and
⊲⊲ PCI Secure Software Lifecycle (Secure SLC) Standard⁴⁴
The new standard requires organizations to govern their use of open source software, and it states that any application utilized as part of the payment process, must be secure by design. Specifically, when it comes to the use of open source components and third-party libraries organizations are responsible for ensuring they, as well as any of their vendors, have:
⊲⊲ An up to date inventory of open-source component releases utilized in the software
⊲⊲ A process for identifying known vulnerabilities within open source component releases
⊲⊲ 360 degree monitoring of open source component releases throughout the SDLC
⊲⊲ A policy and process to immediately remediate vulnerabilities as they become known.
To effectively utilize open source components at scale, the PCI standard also advises organizations to generate a software bill of materials (SBOM) so they can easily track and trace the location of every single component release embedded within their production software applications.
5.4.2 National Telecommunications and Information Administration’s (NTIA) SBOM Initiative
The Commerce Department’s National Telecommunications and Information Administration (NTIA) is considering requiring companies to list their sources of software parts to protect the U.S. software supply chains.
According to the NTIA, their “cybersecurity multistakeholder process will focus on Software Component Transparency. Participants will explore how manufacturers and vendors can communicate useful and actionable information about the thirdparty software components that comprise modern software and IoT devices, and how this data can be used by enterprises to foster better security 45 decisions and practices.”
The NTIA effort comes as the government agencies grow more suspicious of known vulnerable software components being used in application development and increasing awareness of malicious code injection attacks. The NTIA initiative has broad support across Federal agencies and the private sector, as they work together to define standards around a software bill of materials (SBOM).
KEY POINTS
⊲⊲ The SBOM permits organizations to make informed risk decisions about which technologies to purchase and use based on known vulnerability information.
⊲⊲ When new vulnerabilities are discovered, an SBOM allows organizations to quickly identify their exposure and to take appropriate steps in response.”
CHAPTER 5: THE CHANGING LANDSCAPE
5.4.4 U.S. House Energy and Commerce Committee
In December 2018, the U.S. House Energy and Commerce Committee released its Cybersecurity Strategy Report. The report details the importance and priority for utilizing Software Bill of Materials (SBOM) for minimizing supply chain risks related to the use of open source software components in 46 modern application development.
The report states, the “SBOM becomes an ingredients list for a given piece of technology, listing the hardware, software, and other relevant components that it contains or relies upon. This creates two primary benefits. First, it permits organizations to make informed risk decisions about which technologies to purchase and use based on known vulnerability information. Second, when new vulnerabilities are discovered, it allows organizations to quickly identify their exposure and to take appropriate steps in response.”
Next the authors from the Energy and Commerce Committee pointed out that it “was not that organizations did not know which software was vulnerable… it was that they did not know which pieces of technology that they depended on included it. The SBOM minimizes the number of unknown unknowns with which organizations must contend, and greatly increases their ability to protect themselves, their users, and ultimately society.”
5.4.5 U.S. Food and Drug Administration
In October 2018, the FDA released guidance for cybersecurity management of medical devices. Similar to recommendations delivered by the House Energy and Commerce Committee, the FDA’s report called for a Cybersecurity Bill of Materials (CBOM).
The aim of the CBOM is to provide a list of “commercial, open source, and off-the-shelf software and hardware components to enable device users (including patients, providers, and healthcare delivery organizations (HDOs) to effectively manage their assets, to understand the potential impact of identified vulnerabilities to the device (and the connected system), and to deploy countermeasures to maintain the device’s essential performance.”
The FDA report also suggested that MDMs may be subject to legal liabilities tied to the distribution of a medical device with a known vulnerability. The report offered, “If a medical device cybersecurity vulnerability allegedly causes bodily harm, the victim may bring product liability claims against the MDM.” The FDA warned that a plaintiff’s claim could be based on the “failure to provide appropriate warnings about the risk of a cybersecurity vulnerability, or failure to appropriately monitor for the existence of vulnerabilities and appropriately 47 address them once identified.”
KEY POINTS
⊲⊲ In October 2018, the FDA released guidance for cybersecurity management of medical devices. The FDA’s report called for a Cybersecurity Bill of Materials (CBOM).
⊲⊲ The FDA report suggests that MDMs may be subject to legal liabilities tied to the distribution of a medical device with a known vulnerability.
Conclusion
Decades ago, W. Edwards Deming taught key principles to significantly improve the effectiveness and quality of business manufacturing processes. Deming deftly advocated selecting the best suppliers and emphasized continuous improvement. He advised eliminating the need for inspection on a mass basis by building quality into products.48
Businesses racing to deliver better value to their customers — and differentiate from competitors — are embracing Deming’s principles within their open source based software development practices. Software development is evolving from artisan based creations to practices that more closely resemble high velocity parts assembly. This is reflected in the exponential growth of supply and demand for open source components. We’ve observed double and triple digit growth in open source component ecosystems for a decade, and there is no slowdown in sight.
The purpose of this report was to share with you what we observed across software supply chains. Our findings are clear. Velocity does not have to come at the cost of reduced security.
Exemplary open source project initiatives benefit tremendously from higher code commit and release frequencies. They also do an outstanding job of managing their dependencies. At the same time, Exemplars in enterprise are benefiting from processes that support using the latest component versions. They also embrace automated practices to reduce the presence of known vulnerabilities.
Our deep examination of consumption patterns, development practices, and cybersecurity hygiene revealed:
► 18x faster median time to update dependencies for exemplary open source components ► 6.2x more likely for exemplary enterprise development teams to use the latest open source component version (or latest-N) ► 12x higher use of automation to manage open source dependencies in exemplary enterprise development teams ► 55% reduction in the use of vulnerable open source components within managed software supply chains
Management of software supply chains is not simply ensuring quality at velocity. Our supply chains are being attacked by adversaries in new and creative ways. The result: open source related breaches have jumped 71% over the past five years.
As enterprises look for guidance to improve their software development and security practices, industry standards groups are introducing open source awareness policies. Simultaneously, we’ve seen government agencies racing to employ new policies and legislation to protect citizens, businesses, and critical infrastructure.
One thing is clear, exemplary software development practices that deliver high quality, improved security at high velocity are not rare. They are being employed today in large numbers and serve as benchmarks for others to strive for and achieve.
Thank you for reading our 5th annual State of the Software Supply Chain Report. We hope you found it useful. And, we welcome your feedback.
Sources
1 Sonatype, npmjs.org, pypi.org, NuGet.org 2 hub.docker.com 3 Sonatype and modulecounts.com 4 npmjs.org and modulecounts.com 5 developers.slashdot.org/story/17/01/14/0222245/nodejss-npm-is-now-the-largest-package-registry-in-the-world 6 www.idc.com/getdoc.jsp?containerld=US44363318 7 www.oracle.com/java/java9.html 8 twitter.com/seldo/status/1105987692305604608 9 9.7M developers use JavaScript: appdevelopermagazine.com/9.7m-developers-use-javascript/ 10 Sonatype and rubygems.org 11 Sonatype and nuget.org 12 https://chaoss.community 13 https://libraries.io 14 Sonatype.com/nexus-intelligence 15 The (Application) Patching Manifesto (Jeremy Long): www.youtube.com/watch?time_continue=14&v=qVVZrTRJ290 16 Why and How Java Developers Break APIs (Aline Brito, Laerte Xavier, Dr. Andre Hora, Dr. Marco Tulio Valente): arxiv.org/pdf/1801.05198.pdf 17 A Pearson correlation is a number between -1 and 1 that indicates the extent to which two variables are linearly related. The Pearson correlation is also known as the “product moment correlation coefficient” (PMCC) or simply “correlation.” en.wikipedia.org/wiki/Pearson_correlation_coefficient 18 Kendall’s Tau is a non-parametric measure of relationships between columns of ranked data. The Tau correlation coefficient returns a value of 0 to 1, where: 0 is no relationship, and 1 is a perfect relationship. www.statisticshowto.datasciencecentral.com/kendalls-tau
19 statisticssolutions.com/mann-whiteney-u-test 20 “Announcing Accelerate: State of DevOps 2018: Strategies for a New Economy” (Dr. Nicole Forsgren, Jez Humble, Gene Kim): devops-research.com/2018/08/announcing-acelerate-state-of-devops-2018 21 Sonatype 2019 DevSecOps Community Survey 22 “Announcing Accelerate: State of DevOps 2018: Strategies for a New Economy” (Dr. Nicole Forsgren, Jez Humble, Gene Kim): devops-research.com/2018/08/announcing-acelerate-state-of-devops-2018 23 Sonatype and jfrog.com/about/press/jfrog-secures-165-million-investment-to-lead-universal-devops-in-the-enterprise 24 This year in JavaScript: 2018 in review and npm’s predictions for 2019: www.medium.com/npm-inc/this-year-in-javascript-2018-in-review-and-npms-predictions-for-2019-3a3d7e5298ef 25 The (Application) Patching Manifesto (Jeremy Long): www.youtube.com/watch?time_continue=14&v=qVVZrTRJ290 26 Sonatype 2019 DevSecOps Community Survey 27 Sonatype 2019 DevSecOps Community Survey 28 Sonatype 2019 DevSecOps Community Survey 29 Sonatype 2019 DevSecOps Community Survey 30 Sonatype 2019 DevSecOps Community Survey 31 www.isixsigma.com/new-to-six-sigma/statistical-six-sigma-definition 32 https://javascriptsurvey.com 33 npm and the future of JavaScript: slides.com/seldo/npm-future-of-javascript#/18 34 Sonatype 2019 DevSecOps Community Survey and 2014 Open Source and Application Security Survey 35 Sonatype 2019 DevSecOps Community Survey 36 Fortinet Threat Report, Q4’2018 37 Details about the event-stream incident: blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident 38 github.com/urbit/urbit-wallet-generator/issues/4 39 github.com/twbs/bootstrap-sass 40 Corrupting the Software Supply Chain: Lessons from the Bootstrap-sass Hack: blog.sonatype.com/corrupting-thesoftware-supply-chain-lessons-from-the-bootstrap-sass-hack 41github.com/twbs/bootstrap-sass 42 Plot to steal cryptocurrency foiled by the npm security team” blog.npmjs.org/post/185397814280/plot-to-steal-cryptocurrency-foiled-by-the-npm 43 New PCI Software Security Standards: blog.pcisecuritystandards.org/just-published-new-pci-software-security-standards 44 New PCI Software Security Standards: blog.pcisecuritystandards.org/just-published-new-pci-software-security-standards 45 NTIA Software Component Transparency: www.ntia.doc.gov/SoftwareTransparency 46 House Energy and Commerce Cybersecurity Strategies Report: www.hsdl.org/?view&did=819388 47 Content of Premarket Submissions for Management of Cybersecurity in Medical Devices: www.fda.gov/downloads/MedicalDevices/DeviceRegulationandGuidance/Guidance Documents/UCM623529.pdf 48 Dr. Deming’s 14 Points for Management: deming.org/explore/fourteen-points?apartner=aarp
Appendix A
Acknowledgments
Each year, the State of the Software Supply Chain report is produced to shed light on the patterns and practices associated with open source software development. We began collecting data for our 2019 report from the moment our 2018 report was published.
The report is made possible thanks to a tremendous effort put forth by many team members at Sonatype, including: Derek Weeks, Matt Howard, Joel Orlina, Bruce Mayhew, Gazi Mahmud, Dariush Griffin, Mike Hansen, Brian Fox, Ilkka Turunen, Elissa Walters, Daniel Sauble, Adam Cazzolla, Alex Metry, Andrew Stein, Ken Duck, Kevin Hayen, Kevin Witten, Shade Solon, Alvin Gunkel, and Aaron Massey.
We would also like to offer thanks for contributions big and small from: Hasan Yasar (Carnegie Mellon University Software Engineering Institute), Laurie Voss (npm), Brian Dawson (CloudBees), DJ Schleen (Aetna CVS), Nichole Schimanski (Galois) and Eric Davis (Galois), James Wickett and others across the DevOps and open source development community.
A very special thanks goes out to Melissa Schmidt who created the incredible design for this year’s report.
Finally, we could not have produced this report without the amazing contributions and countless hours of deep analysis from our research partners Gene Kim from IT Revolution and Dr. Stephen Magill, Principal Scientist at Galois & CEO of MuseDev.
About the Analysis
The authors have taken great care to present statistically significant sample sizes with regard to component versions, downloads, vulnerability counts, and other data surfaced in this year’s report. Specifically to Chapter 3, all reported differences are statistically significant (p < 0.05) according to a Mann–Whitney U test. While Sonatype has direct access to primary data for Java, JavaScript, Python, .NET and other component formats, we also reference third-party data sources as documented.
Appendix B
23 Metrics Associated with Open Source Project Health
This year’s analysis includes datasets representing development velocity, team size, continuous integration (CI) usage, known security vulnerabilities, component popularity, and other attributes. The objective of this research was to look for top performing projects and characterize their dimensions of excellence. The research also suggests factors that architects, developers, and organizations should consider when making choices about which open source components to use. Our analysis also took into account over 23 metrics associated with open source project health including:
Component_key: The Maven Group ID + Artifact ID, e.g. org. spring-framework:spring-core
Median_ttu_median (lower is better): The median time to upgrade a dependency. For each dependency D, start the clock when an update to some new version V of the dependency is released. Stop it when the component has a release where the version of D is >= V.
Median_ttu_sec_rel_median (lower is better): The median TTU for updates that had a known vulnerability against them at the time the new version was released. This is the best TTR data we have.
Median_ttr_median (lower is bet- ter): A version of TTR that accounts for vulnerabilities discovered long after a component is released. Clock starts when a vulnerability is reported against a dependency of a component. Clock stops when that component updates the dependency.
Already_protected_percentage (higher is better): Records the percentage of security vulnerabilities that don’t apply to this component when they come out because the component was up-to-date with dependencies.
Max_dependency_count: The number of dependencies of the component.
Avg_not_adopted_avg (lower is better): The number of dependency updates that were never applied.
Avg_stale_avg (lower is better): The average percentage of component dependencies that are out of date when a new release of that component comes out.
Avg_period_when_current (lower is better): Average time each release spends as the “current” release. Reciprocal of release frequency.
Avg_stale_time_avg (lower is better): Average period when at least one dependency is out of date. We can probably drop this one. I’m not sure it’s that meaningful.
Stale_time_proportion (lower is better): The percentage of time that a component spends being out of
date. Can probably drop this too. 12. Scm_url: The URL where
the code lives. 13. Two_dots: The first two com-
ponents of the group ID. 14. Three_dots: The first three
components of the group ID. 15. Central_popularity: The average number of downloads per day
from The Central Repository.
16. NexusIQ_popularity: The average
Forks_count: Number of forks.
Forks_count: Number of forks.
Ci-found: Whether we found a CI script.
Avg-commits-per-month: Average number of commits per month.
Avg-commits-uniq-devs: Average number of unique developers
committing each month. 22. Is_commercially_supported: True if group ID starts with “com”
Appendix B
Cumulative Histogram of MTTR
For developers wanting to use secure components, having faster MTTR is desirable. The figures below show a simple histogram of MTTR and MTTU across all components.
Frequency of Median Time to Remediate Vulnerability
Frequency of Median Time to Update Vulnerable Dependencies
Appendix C
Measures of Different Behavior Clusters
Averages
| None(8142) | Small Exemplars(606) | Large Exemplars(595) | Laggards(521) | Features First(280) | Cautious(429) | |
|---|---|---|---|---|---|---|
| TTU(Days) | 245.22 | 18.74 | 10.14 | 692.82 | 602.94 | 103.44 |
| Stale Dependency Percentage | 0.64 | 0.11 | 0.09 | 0.98 | 0.96 | 0.97 |
| Central Popularity(Average Daily Downloads) | 425.5 | 803.67 | 4681.28 | 62.4 | 297.65 | 1349.16 |
| Stars | 907.31 | 191.07 | 1150.31 | 452.92 | 1289.35 | 1009.85 |
| Forks | 343.84 | 41.78 | 651.37 | 171.51 | 434.42 | 351.81 |
| Number of Dependencies | 3.91 | 3.12 | 6.14 | 3.11 | 3.8 | 4.11 |
| Percent Using CI | 0.73 | 0.57 | 0.69 | 0.69 | 0.71 | 0.78 |
| Commit Frequency | 42.16 | 19.51 | 69.34 | 24.43 | 56.47 | 51.25 |
| Number of Developers(Unique Devs Commiting Per Month) | 3.89 | 1.64 | 8.91 | 2.87 | 5.19 | 4.67 |
| Average Period Between New Versions(Days) | 128.43 | 87.62 | 45.64 | 244.25 | 49.99 | 72.14 |
| Percent Commercially Supported | 0.3 | 0.25 | 0.06 | 0.37 | 0.31 | 0.33 |
| Percent Foundation Supported | 0.59 | 0.57 | 0.91 | 0.55 | 0.65 | 0.6 |
Average Multiples
(as compared to “None” class)
| None(8142) | Small Exemplars(606) | Large Exemplars(595) | Laggards(521) | Features First(280) | Cautious(429) |
|---|---|---|---|---|---|
| 1 | 0.08 | 0.04 | 2.82 | 2.45 | 0.42 |
| 1 | 0.17 | 0.14 | 1.55 | 1.52 | 1.53 |
| 1 | - | 11 | 0.15 | 0.7 | - |
| 1 | 0.21 | 1.27 | 0.5 | 1.42 | - |
| 1 | 0.12 | 1.89 | 0.5 | 1.26 | - |
| 1 | 0.8 | 1.57 | 0.8 | - | 1.05 |
| 1 | 0.78 | 0.94 | 0.94 | - | 1.06 |
| 1 | 0.46 | 1.64 | 0.58 | 1.34 | 1.22 |
| 1 | 0.42 | 2.29 | 0.74 | 1.34 | 1.2 |
| 1 | 0.68 | 0.35 | 1.88 | 0.39 | 0.57 |
| 1 | 0.85 | 0.19 | 1.24 | - | - |
| - | 1.54 | 0.92 | 1.1 | - |
A dash (–) indicates that the observed difference between groups was not statistically significant (p > 0.05 with a Mann–Whitney U test)
Appendix D
FIG. 3I The Exemplars: Components Demonstrating the Fastest MTTU and Lowest Stale Dependency Counts
»» bz.tsung.android:objectify
»» com.ahome-it:ahome-tooling-server-core
»» com.amazon.device.tools.build:builder
»» com.amazon.device.tools.build:gradle
»» com.amazon.device.tools.lint:lint-checks
»» com.github.japgolly.fork. scalaz:scalaz-concurrent_sjs0.5_2.11
»» com.github.japgolly.fork.scalaz:scalaz-xml_sjs0.5_2.11
»» com.github.japgolly.fork.scalaz:scalaz-iterv_sjs0.5_2.11
»» com.github.japgolly.fork. scalaz:scalaz-core_sjs0.5_2.11
»» com.aranea-apps.android.libs:android-rest
»» com.ariht:config-generation-maven-plugin
»» com.arasthel:swissknife
»» com.asayama.docs.gwt.angular:gwt-angular-pages
»» com.asayama.gwt:gwt-util
»» com.asayama.gwt.angular:gwt-angular-resources
»» com.asayama.gwt.angular:gwt-angular-masonry
»» com.asayama.gwt.angular:gwt-angular-http
»» com.asayama.gwt.angular:gwt-angular-user
»» com.asayama.gwt.angular:gwt-angular-prettify
»» com.asayama.gwt.angular:gwt-angular-ng
»» com.asayama.gwt.bootstrap:gwt-bootstrap
»» com.asayama.gwt.jquery:gwt-jquery
»» com.automattic:elasticsearch-statsd
»» com.autoscout24.gradle:gradle-monkey-plugin
»» com.damnhandy:handy-uri-templates
»» com.badlogicgames.gdx:gdx-backend-robovm
»» com.badlogicgames.gdx:gdx-backend-lwjgl
»» com.badlogicgames. gdxpay:gdx-pay-android-googleplay
»» com.badlogicgames.gdxpay:gdx-pay
»» com.erinors:xtend-ioc-core
»» com.bartoszlipinski:parsemodel-compiler
»» com.bazaarvoice.dropwizard: dropwizard-webjars-bundle
»» com.bazaarvoice.dropwizard: dropwizard-configurable-assets-bundle
»» com.github.advantageous:qbit-spring
»» com.github.advantageous:qbit-consul-client
»» com.github.advantageous:qbit-eventbus-replicator
»» com.github.advantageous:qbit-vertx
»» com.github.advantageous:qbit-service-discovery
»» com.github.advantageous:qbit-test-support
»» com.github.advantageous:qbit-core
»» com.github.advantageous:qbit-admin
»» com.github.advantageous:qbit-servlet
»» com.github.akarnokd:ixjava
»» com.github.almondtools:rexlex
»» com.github.andreptb:fitnesse-selenium-slim
»» com.github.andrewoma.kommon:kommon
»» com.github.andrewoma.kwery:fetcher
»» com.github.andrewoma.kwery:core
»» com.github.andrewoma.kwery:transactional
»» com.github.andrewoma.kwery:mapper
»» com.github.aro-tech:tdd-mixins-core
»» com.github.aro-tech:extended-mockito
»» com.github.ben-manes.caffeine:guava
»» com.github.chandu0101.
scalajs-react-components:macros_sjs0.6_2.11
»» com.github.czyzby:gdx-lml
»» com.github.danielgindi:helpers
»» com.github.davidmoten:bigsort
»» com.github.davidmoten:rxjava-extras
»» com.github.dblock:oshi-core
»» com.github.ddth:ddth-osgikafka
»» com.github.ddth:ddth-zookeeper
»» com.github.dnvriend:akka-persistence-jdbc_2.10
»» com.github.doctoror.rxcursorloader:library
»» com.github.fbertola:mother-docker
»» com.github.finagle:finch-oauth2_2.10
»» com.github.gabrielemariotti.cards:library-extra
»» com.github.fracpete:screencast4j-weka-package
»» com.github.finagle:finch-demo_2.11
»» com.github.heuermh.adamplugins:adam-plugins_2.11
»» com.github.j-fischer:rest-on-fire
»» com.github.heuermh.
»» com.github.heuermh.adamplugins:adam-plugins_2.10
»» com.github.jinahya:simple-file-back
adamexamples:adam-examples_2.11
»» com.github.heuermh.adamplugins:adam-plugins
»» com.github.jodersky:flow_2.11
»» com.github.joschi:dropwizard-elasticsearch
»» com.github.jsonld-java:jsonld-java-sesame
»» com.github.jsurfer:jsurfer-simple
»» com.github.jszczepankiewicz:dynks
»» com.github.kzwang:elasticsearch-river-dynamodb
»» com.github.kentyeh:sd4j
»» com.github.jtakakura:gradle-robovm-plugin
»» com.github.kzwang:elasticsearch-transport-redis
»» com.github.kzwang:elasticsearch-osem
»» com.github.kzwang:elasticsearch-repository-gridfs
»» com.github.mhshams:core
»» com.github.michaelruocco:wso2-api-publisher-plugin
»» com.github.mictaege:doozer
»» com.github.nkzawa:engine.io-client
»» com.github.oscerd:camel-cassandra
»» com.github.nwillc:contracts
»» com.github.pengrad:java-telegram-bot-api
»» com.github.persapiens:jsf-undertow- spring-boot-starter
»» com.github.persapiens:jsf-undertow- bootsfaces-spring-boot-starter
»» com.github.persapiens:jsf-jetty-bootsfaces- spring-boot-starter
»» com.github.pwittchen:reactivenetwork
»» com.github.pwittchen:reactivebeacons
»» com.github.ratrecommends:gdx-utils
»» com.github.richard-ballard:arbee-test-utils
»» com.github.richard-ballard:arbee-utils
»» com.github.salomonbrys.kodein:kodein
»» com.github.salomonbrys.kodein:kodein-android
»» com.github.scala-blitz:scala-blitz_2.11
»» com.bladecoder.engine:blade-engine-spine-plugin
»» com.bladejava:blade-jetbrick
»» com.bladecoder.engine:blade-engine
»» com.bloidonia:groovy-stream
»» com.github.sd4324530:fastweixin
»» com.github.seratch:ltsv4s_2.11
»» com.github.seratch:jslack
»» com.github.seratch:scalikesolr_2.10
»» com.github.sogyf:goja-qrcode
»» com.github.sv244:torrentstream-android
»» com.braintreepayments.api:braintree
»» com.braintreepayments.api:braintree-api
»» com.github.sviperll:metachicory
»» com.github.sviperll:adt4j-core
»» com.github.thomasnield:rxkotlinfx
»» com.github.tibolte:agendacalendarview
»» com.github.tkurz.sesame:vocab-builder-cli
»» com.github.tkurz.sesame: vocab-builder-maven-plugin
»» com.github.triceo.splitlog:splitlog-core
»» com.github.vmironov.
jetpack:jetpack-bindings-arguments
»» com.github.webdriverextensions: webdriverextensions
»» com.github.wnameless:smartcard-reader
»» com.github.xuwei-k:httpz-scalaj_2.11
»» com.github.xuwei-k:msgpack4z-java07
»» com.github.xuwei-k:play23scalacheck111_2.11
»» com.github.xuwei-k:applybuilder71_2.11
»» com.github.xuwei-k:msgpack4z-java
»» com.github.xuwei-k:play23scalaz71_2.11
»» com.github.xuwei-k:play23scalaz70_2.11
»» com.github.xuwei-k:play-twenty-three_2.11
»» com.digitalpebble:storm-crawler-tika
»» com.digitalpebble:storm-crawler
»» com.cedarsoft.commons:configuration
»» com.cedarsoft.commons.history:core
»» com.mailosaur:mailosaur-java
»» com.pengyifan.bioc:pengyifan-bioc
»» com.cloudhopper:ch-smpp
»» com.cocosw:framework
»» com.codeborne:selenide
»» com.codebullets.saga-lib:saga-lib-guice
»» com.puppycrawl.tools:checkstyle
»» com.dimafeng:testcontainers-scala
»» com.redowlanalytics:swagger2markup-maven-plugin
»» com.rtstatistics:api-client
»» com.craterdog.java-security-framework: java-digital-notary-api
»» com.cyngn.vertx:vertx-kafka
»» com.ea.orbit:orbit-rest-client
»» com.ea.orbit:orbit-actors-spring
»» com.valchkou.datastax:cassandra-driver-mapping
»» com.ea.orbit:orbit-actors-redis
»» com.eharmony:aloha-vw-jni
»» com.englishtown.vertx:vertx-httpservlet
»» com.englishtown.vertx:vertx-zookeeper
»» com.englishtown.vertx:vertx-guice
»» com.englishtown.vertx:vertx-when
»» info.cukes:cucumber-picocontainer
»» com.erudika:para-dao-cassandra
»» com.eventsourcing:eventsourcing-core
»» com.evernote:android-sdk
»» com.facebook.presto:presto-teradata-functions
»» com.facebook.presto:presto-cli
»» com.facebook.presto:presto-orc
»» com.facebook.presto:presto-blackhole
»» com.facebook.presto:presto-server
»» com.floragunn:search-guard-5
»» com.floragunn:search-guard-ssl
»» com.flozano.statsd-netty:statsd-netty
»» com.gabrielittner.auto.value:auto-value-cursor
»» com.getbase.android.autoprovider:library
»» com.giffing.wicket.spring.boot.
starter:wicket-spring-boot-starter-example
»» de.leanovate.doby:doby_2.11
»» com.gocardless:gocardless-pro
»» com.godmonth:godmonth-commons
»» com.googlecode.jmapper-framework:jmapper-core
»» es.litesolutions:sonar-sslr-grappa
»» com.hack23.cia:service.external.worldbank
»» com.hack23.cia:model.external.worldbank.data.impl
»» com.hack23.cia:service.data.impl
»» com.hack23.cia:model.external.vdem.indicators.impl
»» com.hack23.cia:citizen-intelligence-agency
»» com.hack23.cia:model.external.val. landstingvalkrets.impl
»» com.hack23.cia:model.external.riksdagen. dokumentlista.impl
»» com.hack23.cia:model.external.val. riksdagsvalkrets.impl
»» com.hack23.cia:model.external.riksdagen. utskottsforslag.impl
» » nl.bstoi.jersey.test-framework:jersey-spring- riksdagsvalkrets.impl » » no.difi.vefa:validator-core utskottsforslag.impl » » com.semanticcms:semanticcms-autogit-view » » com.hack23.cia:service.impl » » org.codehaus.sonar-plugins. » » com.hack23.cia:service.component.agent.impl
»» com.hack23.cia:service.impl
»» com.hack23.cia:service.component.agent.impl
»» com.hack23.cia:model.external.worldbank.topic.impl
»» com.hack23.cia:model.internal.application.user.impl
»» com.hack23.cia:jms-broker
»» com.hack23.cia:model.external. worldbank.countries.impl
» » org.passay:passay worldbank.countries.impl » » org.requs:requs-demo » » com.hack23.cia:model.external.riksdagen.
»» com.hack23.cia:model.external.riksdagen. dokumentstatus.impl
»» com.hack23.cia:service.external.val
»» com.hack23.cia:model.external.val. kommunvalkrets.impl
»» com.hack23.cia:service.api
»» com.hack23.cia:model.common.impl
»» com.hack23.cia:model.external.riksdagen. voteringlista.impl
»» com.hack23.cia:service.external.riksdagen
»» com.hack23.cia:model.external.riksdagen. documentcontent.impl
»» com.hack23.cia:model.external.val.partier.impl
»» com.hack23.cia:model.external. riksdagen.personlista.impl
»» com.hack23.cia:model.external. riksdagen.votering.impl
»» com.hack23.cia:testfoundation
»» com.holidaycheck:marathon-maven-plugin
»» com.hannesdorfmann.sqlbrite:dao
»» com.ibasco.agql:agql-coc-webapi
»» com.intel.jndn.mock:jndn-mock
»» com.jakewharton.espresso:espresso-runner
»» com.jakewharton.espresso:espresso
»» com.jakewharton.sdkmanager:gradle-plugin
»» com.jdroidframework:jdroid-java-firebase
»» com.jetdrone:yoke-extras
»» com.joyent.http-signature:google-http-client-signature
»» com.jtransc:jtransc-rt-core-kotlin
»» com.jtransc:jtransc-gen-haxe
»» com.jtransc:jtransc-rt
»» com.jtransc:jtransc-utils
»» com.khubla.antlr:antlr4test-maven-plugin
»» com.kotcrab.vis:vis-ui
»» com.leacox.dagger:dagger-servlet
»» io.fabric8:process-spring-boot-starter-activemq
»» com.lapis.jsfexporter:export-type-xml
»» com.lihaoyi:utest-runner_2.11
»» com.lihaoyi:utest_sjs0.5_2.11
»» com.lihaoyi:upickle_sjs0.5_2.11
»» com.linecorp.armeria:armeria-retrofit2
»» com.liulishuo.filedownloader:library
»» com.madgag:bfg-parent_2.11
»» com.merapar:spring-boot-starter-graphql
»» com.michaelpardo:ollie-compiler
»» io.github.clickscript:clickscript_2.10
»» io.github.gpein:jcache-jee7
»» io.github.morgaroth:navigator-import-core_2.11
»» com.netflix.evcache:evcache-client
»» io.github.msdk:msdk-spectra-isotopepattern
»» com.netflix.evcache:evcache-core
»» com.netflix.denominator:denominator-cli
»» io.github.seleniumquery:seleniumquery
»» com.netflix.iep:iep-module-eureka
»» com.mobilesolutionworks:works-bolts
»» com.netflix.iep:iep-module-karyon
»» com.netflix.iep:iep-module-rxnetty
»» com.netflix.spectator:spectator-reg-metrics2
»» com.nicta:rng_2.11
»» com.netflix.iep:iep-guice
»» com.netflix.hystrix:hystrix-codahale-metrics-publisher
»» com.netflix.nebula:nebula-kotlin-plugin
»» com.netflix.iep:iep-governator
»» com.netflix.iep:iep-module-jmxport
»» com.netflix.rxjava:rxjava-quasar
»» com.netflix.iep-shadow:iepshadow-iep-rxhttp
»» com.nitorcreations:willow-utils
»» com.nrinaudo:tabulate-cats_2.10
»» com.nrinaudo:tabulate-cats_2.11
»» com.octo.android.robospice:robospice- google-http-client
»» com.octo.android.robospice:robospice-cache
»» com.octo.android.robospice:robospice-okhttp »» com.optimaize.soapworks.server.
implgrizzly:soapworks-server-implgrizzly
»» com.oracle.truffle:truffle-tck
»» com.oracle.truffle:truffle-api
»» com.orange.redis-protocol:netty4
»» com.outr.query:outrquery-search_2.11
»» com.palomamobile.android.sdk:core
»» com.palominolabs.http:jetty-http-server-wrapper
»» com.palominolabs.metrics:metrics-new-relic
»» com.paypal:cascade-examples_2.11
»» com.paypal:parent_2.11
»» com.pholser:junit-quickcheck-generators
»» com.r0adkll:postoffice
»» com.sandinh:couchbase-akka-extension_2.11
»» com.sandinh:play-hikaricp_2.11
»» com.sandinh:couchbase-scala_2.10
»» com.scalarx:scalarx_sjs0.5_2.11
»» com.scalatags:scalatags_sjs0.5_2.11
»» com.segment.analytics.android: analytics-integration-amplitude
»» com.semanticcms:semanticcms-view-tree
»» com.semanticcms:semanticcms-core-view-content
»» com.semanticcms:semanticcms-autogit-servlet
»» com.semanticcms:semanticcms-file-taglib
»» com.semanticcms:semanticcms-view-all
»» com.semanticcms:semanticcms-core-sitemap
»» com.semanticcms:semanticcms-section-taglib
»» com.semanticcms:semanticcms-section-servlet
»» com.semanticcms:semanticcms-dia-model
»» com.semanticcms:semanticcms-news-servlet
»» com.semanticcms:semanticcms-news-model
»» com.semanticcms:semanticcms-view-what-links-here
»» com.semanticcms:semanticcms-autogit-taglib
»» com.semanticcms:semanticcms-file-servlet
»» com.semanticcms:semanticcms- theme-documentation
»» com.semanticcms:semanticcms-core-taglib
»» com.semanticcms:semanticcms-news-taglib
»» com.semanticcms:semanticcms-file-view
»» io.zipkin.java:zipkin-autoconfigure- storage-elasticsearch
»» com.sksamuel.scrimage:scrimage_2.11
»» com.sksamuel.scrimage:scrimage-canvas_2.11
»» com.smb-tec.neo4j:neo4j-community
»» com.smb-tec.xo:xo-tinkerpop-blueprints
»» com.smoketurner:dropwizard-swagger
»» com.smoketurner.dropwizard:consul-core
»» com.smoketurner.dropwizard:zipkin-example
»» com.smoketurner.dropwizard:zipkin-core
»» com.smoketurner.dropwizard:dropwizard-riak
»» com.softwaremill:reactive-kafka_2.10
»» com.softwaremill.events:core_2.11
»» jp.vmi:selenese-runner-java
»» com.soywiz:korio-ext-amazon-common
»» com.soywiz:korge-ext-particle
»» com.squareup.burst:burst-android
»» net.danlew:android.joda
»» com.thoughtworks.tools:dependency-check
»» com.threerings:tripleplay-java-swt
»» com.tascape.qa:thx-webservice
»» com.timcharper:cassandra-talks-scala_2.11
»» net.osgiliath.framework:net.osgiliath.helpers.camel. cdi.configadmin
»» com.uwetrottmann:trakt-java
»» com.vaadin:vaadin-client
»» com.tinkerpop.blueprints:blueprints-sparksee-graph
»» com.vilt-group.minium:minium-core
»» com.vilt-group.minium:minium-script
»» com.vmware.photon.controller:photon-model-security
»» com.vmware.xenon:xenon-slf4j
»» com.wandoulabs.avro:astore_2.11
»» com.wandrell:java-patterns
»» nl.bstoi.jersey.test-framework:jersey-spring- exposed-test-framework-core
»» com.weicoder:dao
»» no.difi.vefa:validator-core
»» com.semanticcms:semanticcms-autogit-view
»» org.codehaus.sonar-plugins. java:sonar-findbugs-plugin
»» org.ddogleg:ddogleg
»» org.hypoport:mockito-mockinjector
»» org.jbpm:jbpm-console-ng-generic-forms-api
»» org.passay:passay
»» org.requs:requs-demo
»» org.wicketstuff:wicketstuff-restannotations-examples
»» org.wicketstuff:wicketstuff-selectize
»» org.woodylab.boot:spring-boot-starter-pebble
»» pl.wkr:fluent-exception-rule
»» ru.systemate:morpholog-client
»» su.litvak.chromecast:api-v2
» » pl.wkr:fluent-exception-rule kommunvalkrets.impl » » ru.systemate:morpholog-client » » com.hack23.cia:service.api » » su.litvak.chromecast:api-v2 » » com.hack23.cia:model.common.impl » » am.ik.home:uaa-client » » com.hack23.cia:model.external.riksdagen. » » am.ik.home:uaa-integration-test voteringlista.impl
»» am.ik.home:uaa-client
»» am.ik.home:uaa-integration-test
»» at.chrl:chrl-spring
»» at.chrl:chrl-orm
»» biz.gabrys.maven.plugins:css-splitter-maven-plugin
»» ch.cern.dirq:dirq
»» ch.rasc:embeddedtc
»» ch.rasc:constgen
»» ch.sbb.releasetrain:webui
»» ch.sbb.releasetrain:director
»» ch.sbb.releasetrain:utils
»» ch.sbb.releasetrain:action
»» ch.sbb.releasetrain:mavenmojos
»» ch.sbb.releasetrain:config
»» ch.softappeal.yass:yass
»» cn.dreampie:jfinal-mailer
»» cn.org.zeronote:commondao
»» co.cask.cdap:cdap-notifications-api
»» co.cask.cdap:cdap-explore-client
»» im.chic.crypto:crypto-utils
»» im.chic.weixin:weixin-utils
»» info.android15.satellite:satellite
»» de.ahus1.keycloak.dropwizard:keycloak-dropwizard
»» de.codecentric:spring-boot-admin-starter-client
»» de.codecentric:spring-boot-starter-admin-client
»» de.codecentric:spring-boot-admin-sample
»» de.codecentric:spring-boot-starter-batch-web
»» de.javakaffee:kryo-serializers
»» de.learnlib:learnlib-counterexamples
»» de.learnlib:learnlib-reuse
»» de.learnlib:learnlib-drivers-basic
»» de.learnlib:learnlib-basic-eqtests
»» de.learnlib:learnlib-core
»» de.learnlib:learnlib-algorithm-features
»» de.learnlib:learnlib-parallelism
»» de.learnlib:learnlib-nlstar
»» de.learnlib:learnlib-dhc
»» de.learnlib:learnlib-ttt
»» de.learnlib:learnlib-lstar-generic
»» de.learnlib:learnlib-examples
»» de.learnlib:learnlib-mapper
»» de.learnlib:learnlib-kearns-vazirani
»» de.learnlib:learnlib-cache
»» de.learnlib:learnlib-lstar-baseline
»» de.learnlib:learnlib-discrimination-tree
»» de.learnlib:learnlib-acex
»» de.learnlib.testsupport:learnlib-learning-examples
»» de.otto.edison:togglz
»» de.saly:javamail-mock2-fullmock
»» de.saly:javamail-mock2-halfmock
»» de.svenkubiak:jpushover
»» de.svenkubiak:embedded-mongodb
»» de.svenkubiak:mangooio-mongodb-extension
»» de.taimos:spring-dao-mongo
»» de.taimos:spring-dao-hibernate
»» edu.stanford.protege:org.protege. editor.core.application
»» de.taimos:dvalin-dynamodb
»» edu.stanford.protege:protege-owlapi-extensions
»» de.taimos:daemon-framework-spring
»» de.taimos:spring-cxf-daemon
»» eu.michael-simons:java-akismet
»» fr.iscpif.gridscale:gridscalessh_2.11
»» fr.iscpif.gridscale:gridscaleslurm_2.11
»» fr.iscpif.gridscale:gridscaleoar_2.11
»» fr.iscpif.gridscale:gridscalepbs_2.11
»» fr.iscpif.gridscale:gridscalesge_2.11
»» fr.iscpif.gridscale:glitesrmexample_2.11
»» fr.iscpif.gridscale:gridscalehttp_2.11
»» fr.iscpif.gridscale:gliteexample_2.11
»» fr.zebasto:spring-postinitialize
»» gr.grnet:pithosj
»» info.ganglia.gmetric4j:gmetric4j
»» info.johtani:elasticsearch-extended-analyze
»» io.advantageous.qbit:qbit-servlet
»» io.advantageous.qbit:qbit-eventbus-replicator
»» io.advantageous.qbit:qbit-boon
»» io.buji:buji-pac4j
»» io.bigio:bigio-benchmark
»» io.sniffy:sniffy
»» io.dropwizard.modules:dropwizard-flyway
»» io.dropwizard.modules:dropwizard-protobuf
»» io.fabric8:gitective-core
»» io.fabric8:fabric-webapp-agent
»» io.fabric8:process-spring-boot-registry
»» io.fabric8:watcher-dozer
»» io.fabric8:fabric-jolokia
»» io.fabric8:fabric-camel
»» io.fabric8:swagger-annotator
»» io.fabric8:console
»» io.fabric8:kubernetes-jolokia
»» io.fabric8:gateway-api
»» io.fabric8:fabric-git-hawtio
»» io.fabric8:fabric-dynamic-jaxb
»» io.fabric8.insight:insight-kibana3
»» io.fabric8.examples:fabric-camel-cxf
»» io.fabric8.jube:console
»» io.fabric8.insight:insight-eshead
»» io.fabric8.jube:core
»» io.fabric8.forge:kubernetes
»» io.fabric8.examples:fabric-loanbroker-rateservice
»» io.fabric8.jube:process-manager
»» io.fabric8.jube.images.
»» io.fabric8.jube.images. fabric8:quickstart-karaf-camelcbr
»» io.gatling:gatling-http
fabric8:quickstart-karaf-camellog
»» io.fabric8.jube.images.
»» io.gatling:gatling-core
»» io.fabric8.runtime:fabric8-runtime- container-tomcat-registration
fabric8:quickstart-karaf-camelwiki
fabric8:quickstart-karaf-camelwiki » » de.taimos:daemon-framework-spring
»» tv.cntt:netcaty_2.10
»» io.hawt:hawtio-web
»» io.hawt:hawtio-local-jvm-mbean
»» io.konik:itext-carriage
»» io.mangoo:mangooio-test-utilities
»» io.mangoo:mangooio-core
»» io.mangoo:mangooio-integration-test
»» io.mangoo:mangooio-benchmark
»» io.maxthomas:concrete-dictum
»» io.springfox:springfox-staticdocs
»» io.openscore.content:score-ssh
»» io.openscore.content:score-mail
»» io.openscore.lang:score-lang-runtime
»» io.reactivex:rxkotlin
»» io.segment.android:analytics
»» am.ik.home:uaa-server
»» io.taig.android:soap_2.11
»» io.vertigo:vertigo-tempo-impl
»» io.zipkin.java:zipkin-storage-cassandra
»» io.zipkin.java:zipkin-junit
»» io.zipkin.java:zipkin-storage-elasticsearch
»» io.zipkin.java:zipkin-autoconfigure-collector-scribe
»» io.zipkin.java:zipkin-server
»» io.zipkin.java:zipkin-autoconfigure- storage-cassandra3
»» io.zipkin.java:zipkin-autoconfigure- metrics-prometheus
»» io.zipkin.java:zipkin-autoconfigure-storage-cassandra
»» io.zipkin.java:zipkin-autoconfigure-ui
»» io.zipkin.java:zipkin-autoconfigure-collector-kafka
»» it.unibo.alchemist:alchemist-engine
»» it.unibo.alchemist:alchemist-incarnation-protelis
»» it.unimi.dsi:webgraph
»» javax.cache:spring-annotations-test-harness
»» javax.cache:guice-annotations-test-harness
»» javax.cache:specific-implementation-tester
»» javax.cache:guice-annotations-tester
»» javax.cache:spring-annotations-tester
»» me.mattak:moment
»» javax.cache:cdi-annotations-tester
»» me.lessis:zoey-core_2.11
»» me.lessis:zoey-testing_2.11
»» net.aequologica.neo:geppaequo-cdi
»» net.aequologica.neo:geppaequo-web
»» net.aequologica.neo:shakuntala-test
»» net.aequologica.neo:buildhub-core
»» net.aequologica.neo:quintessence-core
»» net.aequologica.neo:parole-core
»» net.aequologica.neo:buildhub-persist
»» net.aequologica.neo:geppaequo-core
»» net.aequologica.neo:buildhub-web
»» net.aequologica.neo:parole-web
»» net.aequologica.neo:dagr-model
»» net.aequologica.neo:dagr-web
»» net.anotheria:moskito-webui-jersey
»» net.bytebuddy:byte-buddy-dep
»» net.code-story:http »» net.imagej:minimaven
»» net.kencochrane.raven:raven-appengine
»» net.kemitix:kxssh
»» net.kencochrane.raven:raven-logback
»» net.liftmodules:omniauth_2.6_2.11
»» net.mostlyoriginal.artemis-odb:contrib-core
»» net.osgiliath.features:net.osgiliath.feature. karaf-enterprise
»» net.mostlyoriginal.artemis-odb:contrib-eventbus
»» net.osgiliath.framework:net.osgiliath.features. karaf-features-validation
»» net.osgiliath.framework:net.osgiliath.features. karaf-features-security
»» net.osgiliath.hello:net.osgiliath.hello.features
»» net.postgis:postgis-jdbc
»» net.sf.derquinsej:derquinsej-test-support
»» net.sf.derquinsej:derquinsej-hib3
»» net.postgis:postgis-jdbc-java2d
»» net.sf.derquinsej:derquinsej-core
»» net.sf.uadetector:uadetector-core
»» net.sf.sprockets:sprockets-android
»» net.wessendorf.websocket:simple-client
»» net.yslibrary.rxrealm:rxrealm
»» nl.komponents.kovenant:kovenant-disruptor
»» no.difi.sdp:sikker-digital-post-java-klient
»» nz.ac.auckland.composite:composite-ebean
»» nz.ac.auckland.composite:composite-jetty
»» nz.co.aetheric.maven:composite-jetty
»» nz.net.osnz.composite:composite-spring
»» nz.net.osnz.composite:composite-spring-jdbc
»» nz.net.osnz.composite:composite-spring-aspects
»» nz.net.osnz.lmz:lmz-runner
»» nz.net.osnz.lmz:lmz-syllabus
»» nz.net.osnz.lmz:lmz-stencil
»» org.agrona:agrona-agent
»» org.akhikhl.gretty:gretty-runner-spring-boot-jetty
»» org.akhikhl.gretty:gretty-helper-commons
»» org.akhikhl.gretty:gretty-plugin-commons
»» org.akhikhl.gretty:gretty-plugin
»» org.akhikhl.rooty:rooty
»» org.akhikhl.unpuzzle:unpuzzle-eclipse2maven
»» org.ansj:ansj_seg
»» org.arquillian.cube:arquillian-cube-containerless
»» org.arquillian.cube:arquillian-cube-spi
»» org.atmosphere:vibe-platform-bridge-vertx2
»» org.atmosphere:vibe-platform-bridge-grizzly2
»» org.atmosphere:vibe-platform-bridge-play2
»» org.atmosphere:vibe-platform-bridge-atmosphere2
»» org.atmosphere:vibe-platform-action
»» org.atmosphere:vibe-platform-http
»» org.atmosphere:vibe-platform-ws
»» org.atmosphere:vibe-platform-bridge-servlet3
»» org.atmosphere:vibe-platform-bridge-netty4
»» org.blocks4j.commons:blocks4j-commons-metrics3
»» org.boofcv:recognition
»» org.boofcv:evaluation
»» org.boofcv:visualize
»» org.boofcv:processing
»» org.boofcv:applet
»» org.boofcv:geo
»» org.boofcv:io
»» org.boofcv:feature
»» org.boofcv:openkinect
»» org.boofcv:sfm
»» org.boofcv:xuggler
»» org.boofcv:android
»» org.boofcv:ip
»» org.boofcv:calibration
»» org.carewebframework:org.carewebframework.shell
»» org.codelibs:elasticsearch-solr-api
»» org.cogroo:cogroo-nlp
»» org.cometd.java:cometd-websocket-jetty
»» org.cometd.tutorials:cometd-tutorials-skeleton
»» org.cubeengine:pericopist-core »» org.danilopianini:javalib-java7
»» org.dashbuilder:dashbuilder-services-api
»» org.dashbuilder:dashbuilder-renderer-default
»» org.dashbuilder:dashbuilder-common-client
»» org.dashbuilder:dashbuilder-validations
»» org.dashbuilder:dashbuilder-widgets
»» org.dashbuilder:dashbuilder-dataset-api
»» org.dashbuilder:dashbuilder-displayer-editor
»» org.dashbuilder:dashbuilder-server-all
»» org.dashbuilder:dashbuilder-renderer-chartjs
»» org.dashbuilder:dashbuilder-renderer-google
»» org.dashbuilder:dashbuilder-dataset-client
»» org.dashbuilder:dashbuilder-webapp
»» org.dashbuilder:dashbuilder-displayer-api
»» org.dashbuilder:dashbuilder-client-all
»» org.dashbuilder:dashbuilder-dataset-editor
»» org.dashbuilder:dashbuilder-displayer-screen
»» org.dm.gradle:gradle-bundle-plugin
»» org.deeplearning4j:deeplearning4j-cli-api
»» org.dashbuilder:dashbuilder-dataset-shared
»» org.dashbuilder:dashbuilder-displayer-client
»» org.deeplearning4j:dl4j-caffe
»» org.dbtools:dbtools-gen
»» org.deeplearning4j:dl4j-spark-ml
»» org.drools:drools-decisiontables
»» org.drools:drools-jsr94
»» org.drools:drools-wb-test-scenario-editor-api
»» org.drools:cdi-example-with-inclusion
»» org.drools:drools-wb-guided-scorecard-editor-api
»» org.drools:default-kiesession
»» org.drools:drools-wb-scorecard-xls-editor-api
»» org.drools:drools-benchmark
»» org.drools:droolsjbpm-integration-distribution
»» org.drools:cdi-example
»» org.drools:drools-pmml
»» org.drools:drools-wb-enum-editor-client
»» org.drools:drools-wb-guided-dtable-editor-api
»» org.drools:kiefilesystem-example
»» org.drools:drools-wb-globals-editor-backend
»» org.drools:drools-wb-guided-template-editor-api
»» org.drools:drools-wb-enum-editor-api
»» org.drools:drools-wb-guided-dtable-editor-client
»» org.drools:drools-wb-guided-template-editor-client
»» org.drools:drools-wb-dsl-text-editor-client
»» org.drools:drools-wb-workitems-editor-client
»» org.drools:drools-wb-dsl-text-editor-backend
»» org.drools:drools-wb-test-scenario-editor-backend
»» org.drools:drools-templates
»» org.drools:droolsjbpm-integration-examples
»» org.drools:drools-wb-dtable-xls-editor-api
»» org.drools:drools-wb-guided-dtree-editor-api
»» org.drools:drools-wb-factmodel-editor-api
»» org.drools:drools-workbench-models-datamodel-api
»» org.drools:kie-module-from-multiple-files
»» org.drools:kiebase-inclusion
»» org.drools:drools-wb-scorecard-xls-editor-backend
»» org.drools:droolsjbpm-tools-distribution
»» org.drools:kiecontainer-from-kierepo
»» org.drools:default-kiesession-from-file
»» org.drools:drools-workbench-models-guided-dtable
»» org.drools:drools-workbench-models-guided-template
»» org.drools:named-kiesession-from-file
»» org.drools:kiemodulemodel-example
»» org.drools:drools-wb-drl-text-editor-backend
»» org.drools:jbpm-simulation
»» org.drools:drools-wb-test-scenario-editor-client
»» org.drools:drools-workbench-models-guided-dtree
»» org.drools:drools-wb-factmodel-editor-backend
»» org.drools:drools-wb-drl-text-editor-api
»» org.drools:drools-beliefs
»» org.drools:drools-wb-drl-text-editor-client
»» org.drools:drools-wb-guided-dtable-editor-backend
»» org.drools:drools-verifier
»» org.drools:drools-wb-workitems-editor-backend
»» org.drools:drools-wb-guided-scorecard-editor-client
»» org.drools:drools-wb-workitems-editor-api
»» org.drools:drools-wb-dtable-xls-editor-backend
»» org.drools:drools-examples
»» org.drools:drools-android
»» org.drools:drools-wb-dsl-text-editor-api
»» org.drools:drools-wb-scorecard-xls-editor-client
»» org.drools:drools-reteoo
»» org.drools:drools-scorecards
»» org.drools:drools-wb-jcr2vfs-import
»» org.drools:named-kiesession
»» org.drools:drools-compiler
»» org.drools:drools-wb-globals-editor-client
»» org.drools:drools-persistence-jpa
»» org.drools:drools-wb-globals-editor-api
»» org.drools:drools-wb-guided-rule-editor-backend
»» org.drools:drools-wb-dtable-xls-editor-client
»» org.drools:drools-wb-guided-rule-editor-api
»» org.drools:drools-core
»» org.drools:drools-wb-guided-rule-editor-client
»» org.drools:drools-wb-enum-editor-backend
»» org.drools:drools-workbench-models-test-scenarios
»» org.drools:drools-wb-guided-dtree-editor-backend
»» org.drools:drools-wb-guided- scorecard-editor-backend
»» org.drools:drools-distribution
»» org.drools:drools-wb-guided-dtree-editor-client
»» org.drools:drools-workbench-models- guided-scorecard
»» org.drools:drools-jboss-integration
»» org.drools:drools-wb-guided-template-editor-backend
»» org.ehcache.modules:ehcache-management
»» org.ehcache.modules:ehcache-impl
»» org.elasticsearch:elasticsearch-analysis-smartcn
»» org.elasticsearch:elasticsearch-analysis-icu
»» org.elasticsearch:elasticsearch-analysis-stempel
»» org.elasticsearch:elasticsearch-analysis-kuromoji
»» org.elasticsearch:elasticsearch-cloud-gce
»» org.elasticsearch:elasticsearch-analysis-phonetic
»» org.everit.osgi:org.everit.osgi.jdbc.commons.dbcp
»» org.fxmisc.flowless:flowless
»» org.fxmisc.richtext:richtextfx
»» org.georegression:georegression
»» org.gaul:s3proxy
»» org.georegression:experimental
»» org.got5:tapestry5-jquery
»» org.greencheek.related:related-indexing
»» org.greencheek.related:related-domain
»» org.greencheek.related:related-web-indexing
»» org.greencheek.related:related-web-searching
»» org.greencheek.related:related-searching
»» org.greencheek.spray:spray-cache-spymemcached
»» org.guvnor:guvnor-rest-client
»» org.guvnor:guvnor-asset-mgmt-api
»» org.guvnor:guvnor-asset-mgmt-backend
»» org.guvnor:guvnor-services-api
»» org.guvnor:guvnor-workingset-client
»» org.guvnor:guvnor-message-console-backend
»» org.guvnor:guvnor-structure-client
»» org.guvnor:guvnor-project-api
»» org.guvnor:guvnor-m2repo-editor-client
»» org.guvnor:guvnor-structure-backend
»» org.guvnor:guvnor-project-backend
»» org.guvnor:guvnor-m2repo-editor-api
»» org.guvnor:guvnor-m2repo-editor-backend
»» org.guvnor:guvnor-services-backend
»» org.guvnor:guvnor-message-console-api
»» org.guvnor:guvnor-rest-backend
»» org.guvnor:guvnor-project-builder
»» org.guvnor:guvnor-asset-mgmt-client
»» org.guvnor:guvnor-organizationalunit-manager
»» org.guvnor:guvnor-structure-api
»» org.guvnor:guvnor-workingset-api
»» org.guvnor:guvnor-message-console-client
»» org.guvnor:guvnor-project-client
»» org.hawkular.inventory:hawkular- inventory-impl-tinkerpop-spi
»» org.hawkular.accounts:hawkular-accounts-api
»» org.hawkular.accounts:hawkular-accounts-sample
»» org.hawkular.inventory:hawkular- inventory-impl-tinkerpop »» org.hawkular.inventory:hawkular-inventory-
impl-tinkerpop-tinkergraph-provider
»» org.hawkular.inventory:hawkular-inventory-impl- tinkerpop-sql-provider
»» org.hibernate:hibernate-validator
»» org.hisrc.w3c:atom-v_1_0
»» org.hisrc.w3c:ws-addr-v_1_0-core
»» org.hisrc.w3c:xhtml-v_1_0-strict
»» org.hisrc.w3c:xlink-v_1_0
»» org.hisrc.w3c:xmlschema-v_1_0
»» org.hyperscala:hyperscala-service_2.11
»» org.hyperscala:hyperscala-connect_2.11
»» org.hyperscala:hyperscala-site_2.11
»» org.igniterealtime.smack:smack-debug-slf4j
»» org.incode.module.note:incode-module-note-dom
»» org.infinispan:infinispan-as-client-modules
»» org.infinispan:infinispan-lucene-v4
»» org.isisaddons.module.audit:isis-module-audit-dom
»» org.isisaddons.module.command: isis-module-command-dom
»» org.isisaddons.module.devutils:
isis-module-devutils-dom
»» org.isisaddons.module.docx:isis-module-docx-dom
»» org.isisaddons.module.publishmq: isis-module-publishmq-dom-servicespi
»» org.isisaddons.module.settings: isis-module-settings-dom
»» org.isisaddons.wicket.fullcalendar2: isis-wicket-fullcalendar2-cpt
»» org.isisaddons.wicket.summernote: isis-wicket-summernote-cpt
»» org.isisaddons.wicket.wickedcharts: isis-wicket-wickedcharts-cpt
»» org.javamoney:moneta
»» org.javamoney:moneta-bp
»» org.javers:javers-persistence-sql
»» org.jboss.aerogear.test:spacelift-jboss-manager
»» org.jboss.aerogear.test.arquillian:arquillian-non- deploying-container-checks-api
»» org.jboss.aerogear.test.arquillian: arquillian-non-deploying-container
»» org.jboss.aerogear.test.arquillian:arquillian-non- deploying-container-checks-impl
»» org.jboss.cdi.tck:cdi-tck-ext-lib
»» org.jboss.cdi.tck:cdi-tck-api
»» org.jboss.gwt.elemento:elemento-core
» » org.jvnet.ogc:owc-v_0_3_1 » » org.jbpm:jbpm-executor-cdi
»» org.jboss.remotingjmx:remoting-jmx
»» org.jboss.resteasy:resteasy-jettison-provider
»» org.jboss.threads:jboss-threads
»» org.jboss.weld.examples:weld-osgi-paint-api
»» org.jboss.weld.module:weld-jta
»» org.jboss.windup.decompiler:decompiler-procyon
»» org.jbpm:jbpm-console-ng-dashboard-backend
»» org.jbpm:jbpm-console-ng- human-tasks-forms-backend
»» org.jbpm:jbpm-human-task-core
»» org.jbpm:jbpm-console-ng- process-runtime-admin-client
»» org.jbpm:jbpm-kie-services
»» org.jbpm:jbpm-console-ng-executor-service-client
»» org.jbpm:jbpm-console-ng-generic-api
»» org.jbpm:jbpm-form-modeler-api
»» org.jbpm:jbpm-persistence-jpa
»» org.jbpm:jbpm-console-ng-showcase
»» org.jbpm:jbpm-shared-services
»» org.jbpm:jbpm-form-modeler-document
»» org.jbpm:jbpm-console-ng-dashboard-api
»» org.jbpm:jbpm-services-ejb-api
»» org.jbpm:jbpm-document
»» org.jbpm:jbpm-console-ng-human-tasks-forms-client
data-modeller-backend » » org.jbpm:jbpm-document org.jbpm:jbpm-bpmn2
» » org.kie.workbench.screens:kie-wb-common- tasks-admin-backend
»» org.jbpm:jbpm-console-ng-human- tasks-admin-backend
»» org.jbpm:jbpm-form-modeler-bpmn-form-builder
»» org.jbpm:jbpm-form-modeler-editor-api
»» org.jbpm:jbpm-services-cdi
»» org.jbpm:jbpm-form-modeler-editor-backend
»» org.jbpm:jbpm-designer-backend
»» org.jbpm:jbpm-console-ng-business-domain-client
»» org.jbpm:jbpm-console-ng-business-domain-backend
»» org.jbpm:jbpm-audit
human-tasks-forms-modeler-client
»» org.jbpm:jbpm-console-ng-
»» org.jbpm:jbpm-flow-builder
»» org.jbpm:jbpm-console-ng-human-tasks-backend
»» org.jbpm:jbpm-runtime-manager
»» org.jbpm:jbpm-console-ng-executor-service-backend
»» org.jbpm:jbpm-console-ng-human-tasks-admin-api
»» org.jbpm:jbpm-services-api
»» org.jbpm:jbpm-human-task-audit
»» org.jbpm:jbpm-form-modeler-renderer-backend
»» org.jbpm:jbpm-console-ng-human-tasks-client
»» org.jbpm:jbpm-services-ejb-timer
»» org.jbpm:jbpm-console-ng-business-domain-api »» org.jbpm:jbpm-console-ng-process-runtime-api
»» org.jbpm:jbpm-executor
»» org.jbpm:jbpm-console-ng-bpm-home-client
»» org.jbpm:jbpm-form-modeler-data-modeler
»» org.jbpm:jbpm-console-ng-human-tasks-admin-client
»» org.jbpm:jbpm-executor-cdi
»» org.jbpm:jbpm-console-ng-process-runtime-backend
»» org.jbpm:jbpm-console-ng-human-tasks-api
»» org.jbpm:jbpm-flow
»» org.jbpm:jbpm-executor-ejb
»» org.jbpm:jbpm-console-ng- process-runtime-forms-client »» org.jbpm:jbpm-designer-api
»» org.jbpm:jbpm-human-task-jpa
»» org.jbpm:jbpm-form-modeler-editor-client
server-ui-client » » org.jbpm:jbpm-designer-api
» » org.jvnet.ogc:sampling-v_2_0 » » org.jbpm:jbpm-human-task-core » » » org.jvnet.ogc:wms-v_1_3_0 » » org.jbpm:jbpm-console-ng- » » org.jvnet.ogc:wcst-v_1_1 process-runtime-admin-client
»» org.jbpm:jbpm-services-ejb-impl
»» org.jbpm:jbpm-console-ng-generic-forms-client
»» org.jbpm:jbpm-console-ng- workbench-integration-client
»» org.jbpm:jbpm-console-ng-generic-client
»» org.jbpm:jbpm-console-ng-documents-backend
»» org.joeyb.undercarriage:grpc
»» org.jbpm:jbpm-form-modeler-renderer-client
»» org.jodd:jodd-mail
»» org.jbpm:jbpm-examples
»» org.jbpm:jbpm-human-task-workitems
»» org.jbpm:jbpm-bpmn2
»» org.jbpm:jbpm-console-ng-process-runtime-client
»» org.jbpm:jbpm-console-ng-documents-api
»» org.jbpm:jbpm-designer-client
»» org.joinfaces:jsf-jetty-myfaces- bootsfaces-spring-boot-starter
»» org.jbpm:jbpm-console-ng-executor-service-api
»» org.jbpm:jbpm-form-modeler-renderer-api
»» org.jbpm:jbpm-console-ng-documents-client
»» org.jbpm:jbpm-form-modeler-showcase
»» org.jbpm:jbpm-console-ng-dashboard-client
»» org.joinfaces:jsf-jetty-butterfaces-spring-boot-starter
»» org.jnario:org.jnario.lib.maven
»» org.joinfaces:jsf-undertow- bootsfaces-spring-boot-starter
»» org.joinfaces:jsf-butterfaces-spring-boot-starter
»» org.joinfaces:jsf-myfaces- butterfaces-spring-boot-starter
»» org.joinfaces:jsf-undertow- butterfaces-spring-boot-starter
»» org.joinfaces:jsf-undertow-myfaces-bootsfaces- spring-boot-starter
»» org.junit.contrib:junit-theories
»» org.jvnet.ogc:ows-v_1_1_0
»» org.jvnet.ogc:kml-v_2_2_0
»» org.jvnet.ogc:sld-v_1_0_0-geoserver
»» org.jvnet.ogc:wmc-v_1_0_0
social-home-page-api » » org.jboss.aerogear.test.arquillian:arquillian-non-
»» org.jvnet.ogc:gml-v_3_2_1
»» org.jvnet.ogc:wfs-v_2_0
»» org.jvnet.ogc:sos-v_2_0
»» org.jvnet.ogc:ols-nav-v_1_3 »» org.jvnet.ogc:owc-v_0_3_1
»» org.jvnet.ogc:ows-v_2_0
»» org.jvnet.ogc:wmts-v_1_0
»» org.jvnet.ogc:ols-v_1_1_0
»» org.jvnet.ogc:wcs-v_2_0
»» org.jvnet.ogc:iso19139-v_20070417
»» org.jvnet.ogc:sps-v_1_0_0
»» org.jvnet.ogc:wps-v_1_0_0
»» org.jvnet.ogc:iso19139-v_20060504
»» org.jvnet.ogc:sampling-v_2_0
»» org.jvnet.ogc:wms-v_1_3_0
»» org.jvnet.ogc:wcst-v_1_1
»»» org.jvnet.ogc:sampling-v_1_0_0
»» org.jvnet.ogc:om-v_2_0
» org.jvnet.ogc:sld-v_1_0_0
»» org.jvnet.ogc:wcs-v_1_1
»» org.jvnet.ogc:sld-v_1_1_0
» » org.jvnet.ogc:wcs-v_1_1 » » org.jbpm:jbpm-console-ng-generic-api » » » » org.jvnet.ogc:om-v_2_0 » » org.jbpm:jbpm-form-modeler-api » » org.jvnet.ogc:sld-v_1_1_0 » » org.jbpm:jbpm-persistence-jpa » » org.jvnet.ogc:wfs-v_1_0_0 » » org.jbpm:jbpm-console-ng-showcase
project-explorer-api » » org.jbpm:jbpm-shared-services »
»» org.jvnet.ogc:wfs-v_1_0_0
»» org.jvnet.ogc:wmc-v_1_1_0
»» org.jvnet.ogc:csw-v_2_0_2
»» org.jvnet.ogc:gml-v_3_2_0
»» org.jvnet.ogc:gml-v_3_1_1
»» org.jvnet.ogc:ows-v_1_0_0
»» org.jvnet.ogc:filter-v_1_1_0
»» org.jvnet.ogc:om-v_1_0_0
»» org.jvnet.ogc:swes-v_2_0
»» org.jvnet.ogc:arml-v_2_0
»» org.jvnet.ogc:wps-v_2_0
»» org.jvnet.ogc:indoorgml-v_1_0
»» org.jvnet.ogc:gmlcov-v_1_0
»» org.jvnet.ogc:wcs-v_1_0_0
»» org.jvnet.ogc:omx-v_1_0_0
»» org.jvnet.ogc:citygml-v_1_0
»» org.jvnet.ogc:omeo-v_1_0
»» org.kaazing:robot.all
»» org.kie:kie-drools-wb-webapp
»» org.kie:kie-wb-webapp
»» org.kie:kie-drools-wb-home-page-community
» » org.kaazing:robot.all isis-wicket-fullcalendar2-cpt » » org.kie:kie-drools-wb-webapp » » org.isisaddons.wicket.summernote: » » org.kie:kie-wb-webapp isis-wicket-summernote-cpt » » org.kie:kie-wb-home-page-community isis-wicket-wickedcharts-cpt » » org.kie:kie-identity-session-provider » » org.javamoney:moneta » » org.kie:kie-ci-osgi » » org.javamoney:moneta-bp
»» org.kie:kie-wb-home-page-community
»» org.kie:kie-identity-session-provider
»» org.kie:kie-ci-osgi
»» org.kie.uberfire:kie-uberfire-social-activities-client
»» org.kie.workbench.screens:kie-wb-common- social-home-page-backend
»» org.kie.uberfire:kie-uberfire-social-activities-api
»» org.kie.uberfire:kie-uberfire-social-activities-backend
»» org.kie.workbench.screens:kie-wb-common- social-home-page-api
»» org.kie.workbench.screens:kie-wb-common- project-imports-editor-api
»» org.kie.workbench.screens:kie-wb-common- search-screen-api
»» org.kie.workbench.screens:kie-wb-common- contributors-client
»» org.kie.workbench.screens:kie-wb-common- default-editor-client
»» org.kie.workbench.screens:kie-wb-common- project-editor-api
»» org.kie.workbench.screens:kie-wb-common- server-ui-client
»» org.kie.workbench.screens:kie-wb-common- project-editor-client
»» org.kie.workbench.screens:kie-wb-common- default-editor-backend
»» org.kie.workbench.screens:kie-wb-common- project-explorer-client
» » org.kie.workbench.screens:kie-wb-common- »» » org.jvnet.ogc:sampling-v_1_0_0 project-explorer-client » org.jvnet.ogc:sld-v_1_0_0
»» org.kie.workbench.screens:kie-wb-common- search-screen-backend
»» org.kie.workbench.screens:kie-wb-common- data-modeller-api
»» org.kie.workbench.screens:kie-wb-common- project-explorer-api
»» org.kie.workbench.screens:kie-wb-common- home-client
»» org.kie.workbench.screens:kie-wb-common- data-modeller-backend
»» org.kie.workbench.screens:kie-wb-common- project-editor-backend
»» org.kie.workbench.screens:kie-wb-common- java-editor-api
»» org.kie.workbench.screens:kie-wb-common- social-home-page-client
»» org.kie.workbench.screens:kie-wb-common- contributors-backend
»» org.kie.workbench.screens:kie-wb-common- project-imports-editor-client
»» org.kie.workbench.screens:kie-wb-common- project-explorer-backend
»» org.kie.workbench.screens:kie-wb-common- search-screen-client
»» org.kie.workbench.screens:kie-wb-common- default-editor-api
»» org.kie.workbench.screens:kie-wb-common-home-api
»» org.kie.workbench.screens:kie-wb-common-s erver-ui-backend
»» org.kie.workbench.screens:kie-wb-common- server-ui-api
»» org.kie.workbench.screens:kie-wb-common- data-modeller-client
»» org.kie.workbench.screens:kie-wb-common- java-editor-client
»» org.kie.workbench.services:kie-wb-common- services-backend
»» org.kie.workbench.services:kie-wb-common- refactoring-backend
»» org.kie.workbench.services:kie-wb-common- refactoring-api
»» org.kie.workbench.services:kie-wb-common- data-modeller-core
»» org.kie.workbench.services:kie-wb-common- datamodel-backend
»» org.kie.workbench.services:kie-wb-common- services-api
»» org.kie.workbench.services:kie-wb-common- datamodel-api
»» org.kie.workbench.widgets:kie-wb-metadata-widget
»» org.kie.workbench.widgets:kie-wb- decorated-grid-widget
»» org.kie.workbench.widgets:kie-wb-config- resource-widget
»» org.kie.workbench.widgets:kie-wb-common-ui
»» org.kohsuke.args4j:args4j-maven-plugin
»» org.languagetool:language-uk
»» org.lastaflute:lastaflute
»» org.lumongo:lumongo-storage
»» org.mapsforge:mapsforge-map-android
»» org.mobicents.diameter:jdiameter-ha-api
»» org.monifu:monifu-core-js_2.11
»» org.monifu:monifu-rx_2.11
»» org.nmdp.ngs:ngs-hml
»» org.nmdp.ngs:ngs-align
»» org.nmdp.ngs:ngs-reads
»» org.ocelotds:ocelot-glassfish
»» org.ocelotds:ocelot-wildfly
»» org.openfuxml:ofx-xml
»» org.openehealth.ipf.platform-
»» org.openscience.cdk:cdk-inchi
»» org.openscoring:openscoring-service
camel:ipf-platform-camel-ihe-fhir
»» org.openscoring:openscoring-common
»» org.openscoring:openscoring-common-gwt
»» org.openurp.code:openurp-code-api
»» org.openurp.platform:openurp-platform-ws
»» org.openurp.platform.api:openurp-platform-api-web
»» org.openurp.platform.
kernel:openurp-platform-kernel-core
kernel:openurp-platform-kernel-ws
»» org.openurp.platform.
»» org.openurp.platform.
kernel:openurp-platform-kernel-webapp
»» org.openurp.platform.
security:openurp-platform-security-webapp
»» org.openurp.platform. security:openurp-platform-security-core
»» org.openurp.platform. security:openurp-platform-security-app
»» org.optaplanner:optaplanner-wb-solver-editor-api
»» org.optaplanner:optaplanner-core
»» org.parceler:parceler
»» org.requs:requs-exec
»» org.requs:requs-core
»» org.rhq.metrics:rest-servlet
»» org.rapidpm.microservice:rapidpm-microservice- modules-persistence-local-hashmap
»» org.richfaces:richfaces-core
»» org.rythmengine:spring-rythm
»» org.scala-lang:scala-compiler
»» org.scalastuff:json-parser_2.11
»» org.scalatest:scalatest-core_2.10
»» org.scalatest:scalatest-core_sjs0.6_2.10
»» org.scalikejdbc:scalikejdbc-interpolation-core_2.11
»» org.scalikejdbc:scalikejdbc-async_2.11
»» org.simpleflatmapper:sfm
»» org.skinny-framework:skinny-orm_2.11
»» org.seasar.doma.boot:doma-spring- boot-sample-simple
»» org.skinny-framework:skinny-test_2.11
»» org.skinny-framework:skinny-factory-girl_2.11
»» org.spf4j:spf4j-jmh
»» org.tomitribe:beryllium
»» org.skinny-framework:skinny-orm_2.10
»» org.uberfire:uberfire-widgets-properties-editor-api
»» org.uberfire:uberfire-runtime-plugins-backend
»» org.springframework.boot:spring-boot-starter-actuator
»» org.skinny-framework:skinny-logback
»» org.springframework.boot:spring-boot-gradle-plugin
»» org.springframework.boot:spring-boot-starter-velocity
»» org.uberfire:uberfire-runtime-plugins-api
»» org.uberfire:uberfire-widgets-core-client »» org.uberfire:uberfire-backend-cdi
»» org.uberfire:uberfire-widgets-service-api
»» org.uberfire:uberfire-nio2-api
»» org.uberfire:uberfire-security-api
»» org.uberfire:uberfire-runtime-plugins-client
»» org.uberfire:uberfire-nio2-model
» » org.wicketstuff:wicketstuff-servlet3-auth project-explorer-backend » » org.wicketstuff:lightbox2 » » org.kie.workbench.screens:kie-wb-common- » » org.wicketstuff:wicketstuff-bundle search-screen-client » » org.wicketstuff:wicketstuff-stateless default-editor-api
»» org.uberfire:uberfire-workbench- client-views-patternfly
»» org.uberfire:uberfire-apps-client
»» org.uberfire:uberfire-wires-bpmn-api
»» org.uberfire:uberfire-widget-markdown
»» org.uberfire:uberfire-wires-bayesian-parser-backend
»» org.uberfire:uberfire-client-api
»» org.uberfire:uberfire-widgets-properties-editor-client
»» org.uberfire:uberfire-widgets-service-backend
»» org.uberfire:uberfire-api
»» org.uberfire:uberfire-apps-backend
»» org.uberfire:uberfire-security-client
»» org.uberfire:uberfire-commons-editor-api
»» org.uberfire:uberfire-widgets- roperties-editor-backend
»» org.uberfire:uberfire-wires-bpmn-client
»» org.uberfire:uberfire-backend-server
»» org.uberfire:uberfire-commons-editor-backend
»» org.uberfire:uberfire-testing-utils
»» org.uberfire:uberfire-wires-bayesian-parser-api
»» org.uberfire:uberfire-backend-api
»» org.uberfire:uberfire-distro
»» org.uberfire:uberfire-commons-editor-client
»» org.uberfire:uberfire-apps-api
»» org.uberfire:uberfire-widgets-commons
»» org.walkmod:walkmod-java-formatter-plugin
»» org.wicketstuff:wicketstuff-select2-examples
»» org.wicketstuff:wicketstuff-stateless-examples
»» org.wicketstuff:wicketstuff-datastore-redis
»» org.wicketstuff:wicket-mount
» » org.wicketstuff:wicket-mount resource-widget boot-sample-simple
»» org.wicketstuff:wicketstuff-jwicket-tooltip-wtooltips
»» org.wicketstuff:wicketstuff-dropdown-menu
»» org.wicketstuff:wicketstuff-context-examples
»» org.wicketstuff:wicket-facebook
»» org.wicketstuff:tinymce4-examples
»» org.wicketstuff:wicket-mount-core
»» org.wicketstuff:wicketstuff-progressbar
»» org.wicketstuff:wicketstuff-urlfragment-examples
»» org.wicketstuff:wicketstuff-security-wicomsec
»» org.wicketstuff:wicketstuff-jwicket-examples
»» org.wicketstuff:wicketstuff-lazymodel
»» org.wicketstuff:wicketstuff-tinymce
»» org.wicketstuff:javaee-inject-example-war
»» org.wicketstuff:wicketstuff-input-events
»» org.wicketstuff:wicketstuff-logback
»» org.wicketstuff:wicketstuff-twitter
»» org.wicketstuff:wicketstuff-objectautocomplete
»» org.wicketstuff:wicketstuff-logback-examples
»» org.wicketstuff:wicketstuff-openlayers-proxy
»» org.wicketstuff:wicketstuff-servlet3-auth
»» org.wicketstuff:lightbox2
»» org.wicketstuff:wicketstuff-bundle
»» org.wicketstuff:wicketstuff-push-cometd
»» org.wicketstuff:wicketstuff-stateless
»» org.wicketstuff:wicketstuff-jwicket-ui-effects
»» org.wicketstuff:wicketstuff-htmlcompressor
»» org.wicketstuff:wicketstuff-native-websocket-javax
»» org.wicketstuff:wicketstuff-push-core
»» org.wicketstuff:flot-examples
»» org.wicketstuff:wicketstuff-push-timer
»» org.wicketstuff:wicketstuff-inmethod-grid-examples
» » org.wicketstuff:wicketstuff-jwicket-ui-effects erver-ui-backend » » org.uberfire:uberfire-client-api server-ui-api » » org.wicketstuff:wicketstuff-push-timer » » org.openurp.platform. » » org.wicketstuff:wicketstuff-html5 » » org.openurp.platform.
»» org.wicketstuff:modalx-examples
»» org.wicketstuff:wicketstuff-html5
»» org.wicketstuff:wicketstuff-restannotations
»» org.wicketstuff:wicketstuff-jwicket-tooltip-walterzorn
»» org.wicketstuff:wicketstuff-annotation
»» org.wicketstuff:wicketstuff-jwicket-ui-dragdrop
»» org.wicketstuff:wicketstuff-jwicket-core
» » org.wicketstuff:wicketstuff-jwicket-core » » org.parceler:parceler
»» org.wicketstuff:javaee-inject-example-ejb
»» org.wicketstuff:wicketstuff-mbeanview
»» org.wicketstuff:wicketstuff-whiteboard-examples
»» org.wicketstuff:wicketstuff-jwicket-ui-resize
» » org.uberfire:uberfire-commons-editor-backend » » org.requs:requs-exec » » org.wicketstuff:wicketstuff-mbeanview data-modeller-core » » org.uberfire:uberfire-testing-utils » » org.requs:requs-core » » org.wicketstuff:wicketstuff-jwicket-ui-resize datamodel-backend » » org.uberfire:uberfire-backend-api » » org.richfaces:richfaces-core » » org.uberfire:uberfire-distro » » org.rythmengine:spring-rythm » » org.wicketstuff:wicketstuff-jwicket-ui-tooltip services-api
»» org.wicketstuff:wicketstuff-jwicket-ui-tooltip
»» org.wicketstuff:wicketstuff-serializer-kryo
»» org.wicketstuff:wicketstuff-annotationeventdispatcher
»» org.wicketstuff:modalx
»» org.wicketstuff:wicketstuff-urlfragment
»» org.wicketstuff:javaee-inject-example-ear
»» org.wicketstuff:wicket-osgi-test-web
»» org.wicketstuff:wicket-osgi-test-service
»» org.wicketstuff:wicket-shiro-example-base
»» org.wicketstuff:wicketstuff-progressbar-spring
»» org.wicketstuff:wicketstuff-openlayers
»» org.wicketstuff:wicketstuff-plugin
»» org.wicketstuff:async-task-demo
»» org.wicketstuff:wicketstuff-security-swarm
»» org.wicketstuff:wicketstuff-htmlcompressor-examples
»» org.wicketstuff:wicketstuff-jwicket-ui-sort
»» org.wicketstuff:wicketstuff-security-wasp
»» org.wicketstuff:tinymce3-examples
»» org.wicketstuff:wicketstuff-editable-grid
»» org.wicketstuff:wicketstuff-jslibraries
»» org.wicketstuff:wicketstuff-glassfish4-integration
»» org.wicketstuff:wicketstuff-servlet3
»» org.wicketstuff:wicketstuff-poi
»» org.wicketstuff:wicketstuff-jsr303
»» org.wicketstuff:wicketstuff-wicket7
»» org.wicketstuff:wicketstuff-googlecharts
»» org.wicketstuff:wicketstuff-serializer-ui
»» org.wicketstuff:wicketstuff-sitemap-xml-examples
»» org.wicketstuff:wicketstuff-gae-initializer
»» org.wicketstuff:wicketstuff-yui-common
»» org.wicketstuff:wicketstuff-closure-compiler
»» org.wicketstuff:wicketstuff-serializer-common
»» org.wicketstuff:wicket-mount-example
»» org.wicketstuff:wicketstuff-jwicket-tooltip-beautytips
»» org.wicketstuff:wicketstuff-datastore-memcached
»» org.wicketstuff:wicketstuff-ioc-bundle
»» org.wicketstuff:wicketstuff-minis
»» org.wicketstuff:wicketstuff-simile-timeline
»» org.wicketstuff:wicketstuff-portlet
»» org.wicketstuff:wicketstuff-yui-calendar
»» org.wicketstuff:wicketstuff-autocomplete-tagit
»» org.wicketstuff:wicketstuff-context
»» org.wicketstuff:wicketstuff-jquery
»» org.wicketstuff:wicketstuff-tinymce4
»» org.wicketstuff:wicketstuff-datastore-cassandra
»» org.wicketstuff:wicketstuff-inmethod-grid
»» org.wicketstuff:wicketstuff-serializer-fast
»» org.wicketstuff:wicket-shiro-example-realm
»» org.wicketstuff:wicketstuff-osgi
»» org.wicketstuff:progressbar-example
»» org.wicketstuff:wicketstuff-jwicket-ui-accordion
»» org.wicketstuff:wicketstuff-dashboard-widgets-ofchart
»» org.wicketstuff:wicketstuff-jee-web
»» org.wicketstuff:wicketstuff-datastore-common
»» org.wicketstuff:async-task-impl
»» org.wicketstuff:wicket-shiro-example-spring-jdbc
»» org.wicketstuff:wicketstuff-tinymce3
»» org.wicketstuff:wicketstuff-javaee-inject
»» org.wicketstuff:wicketstuff-jwicket-ui-datepicker
»» org.wicketstuff:wicketstuff-select2
»» org.wicketstuff:whiteboard-examples
»» org.wicketstuff.foundation:wicket-foundation-core
»» org.wicketstuff.scala:wicketstuff-scala-archetype
»» org.wicketstuff.scala:wicketstuff-scala
»» org.wicketstuff.scala:wicketstuff-sample
»» org.wildfly:wildfly-connector
»» org.wildfly:wildfly-naming
»» org.wildfly:wildfly-weld
»» org.wildfly:wildfly-clustering-common
»» org.wildfly:wildfly-clustering-spi
»» org.wildfly:wildfly-web-common
»» org.wildfly:wildfly-mod_cluster-extension
»» org.wildfly:wildfly-clustering-service
»» org.wildfly:wildfly-pojo
»» org.wildfly:jipijapa-hibernate4-1
»» org.wildfly:wildfly-iiop-openjdk
»» org.wildfly:wildfly-messaging-activemq
»» org.wildfly:jipijapa-eclipselink
»» org.wildfly:jipijapa-hibernate5
»» org.wildfly:wildfly-clustering-ejb-spi
»» org.wildfly:wildfly-jacorb
»» org.wildfly:wildfly-bean-validation
»» org.wildfly:wildfly-jsr77
»» org.wildfly:wildfly-webservices-server-integration
»» org.wildfly:wildfly-jpa
»» org.wildfly:wildfly-ee
»» org.wildfly:wildfly-jaxrs
»» org.wildfly:wildfly-messaging
»» org.wildfly:wildfly-ejb3
»» org.wildfly:wildfly-jsf
»» org.wildfly:wildfly-sar
»» org.wildfly.core:wildfly-domain-http-interface
»» org.wildfly.core:wildfly-server
»» org.wildfly.core:wildfly-jmx
»» org.wildfly.core:wildfly-request-controller
»» org.wildfly.core:wildfly-controller
»» org.wildfly.core:wildfly-patching
»» org.wildfly.core:wildfly-cli
»» org.wildfly.core:wildfly-core-feature-pack
»» org.wildfly.core:wildfly-host-controller
»» org.wildfly.core:wildfly-protocol
»» org.wildfly.core:wildfly-embedded
»» org.wildfly.core:wildfly-process-controller
»» org.wildfly.core:wildfly-management-client-content
»» org.wildfly.core:wildfly-controller-client
»» org.wildfly.core:wildfly-version
»» org.wildfly.core:wildfly-discovery
»» org.wisdom-framework:application-configuration
»» org.wisdom-framework:ehcache-cache-service
»» org.wisdom-framework:hibernate-validation-service
»» org.wildfly.core:wildfly-io
»» org.wildfly.core:wildfly-logging
»» org.wildfly.core:wildfly-remoting
»» org.wisdom-framework:resource-controller
»» org.wisdom-framework:i18n-service
»» org.wisdom-framework:wisdom-ipojo-module
»» org.wisdom-framework:default-error-handler
»» org.xblackcat.sjpu:sjpu-saver
»» org.xhtmlrenderer:flying-saucer-pdf
»» org.xtext:xtext-gradle-lib
»» org.zapodot:jackson-databind-java-optional
»» pl.allegro.tech.boot:handlebars-spring-boot-starter
»» ru.stqa.selenium:webdriver-repeatable-actions
»» pl.chilldev.commons:commons-text
»» ru.vyarus:guice-ext-annotations
»» pl.chilldev.commons:commons-jsonrpc
»» pl.wavesoftware:eid-exceptions
»» ru.stqa.selenium:webdriver-expected-conditions
»» ru.yandex.qatools.clay:clay-utils
»» ru.stqa.selenium:webdriver-factory
»» ru.stqa.selenium:webdriver-wrapper
»» ru.stqa.selenium:webdriver-logging-wrapper
»» ru.yandex.qatools.embed:postgresql-embedded
»» se.culvertsoft:mgen-javagenerator
»» se.culvertsoft:mgen-idlparser
»» se.culvertsoft:mgen-javascriptgenerator
»» se.wfh.libs:beencode
»» si.uom:si-units-java8
»» tec.units:unit-ri
»» tech.aroma.banana:banana-thrift
»» tv.cntt:xitrum-ko_2.11
»» tv.cntt:netcaty_2.11
»» tv.cntt:xitrum-hazelcast2_2.11
»» tv.cntt:xitrum-hazelcast3_2.11
»» tv.cntt:xitrum_2.11
»» uk.co.real-logic:aeron-samples
»» us.eharning.atomun:atomun-mnemonic
»» us.fatehi:schemacrawler-mysql
»» us.fatehi:schemacrawler-h2
»» uy.klutter:klutter-elasticsearch-jdk7
»» uy.klutter:klutter-config-typesafe-jdk6
»» uy.klutter:klutter-json-jackson-jdk6
»» uy.klutter:klutter-json-jackson-jdk8
»» uy.kohesive.injekt:injekt-config-typesafe-jdk7
»» uy.kohesive.injekt:injekt-config-typesafe-jdk6
»» uy.kohesive.kovert:kovert-vertx
»» uy.kohesive.kovert:kovert-vertx-jdk8
sonatype
More than 10 million software developers rely on Sonatype to innovate faster while mitigating security risks inherent in open source. Sonatype’s Nexus platform combines in-depth component intelligence with real-time remediation guidance to automate and scale open source governance across every stage of the modern DevOps pipeline. Sonatype is privately held with investments from TPG, Goldman Sachs, Accel Partners, and Hummer Winblad Venture Partners.
Visit www.sonatype.com to learn more.
Sonatype Inc.
Copyright ©2019 – present, all rights reserved. Sonatype and Sonatype Nexus are trademarks of Sonatype, Inc. All other trademarks are the property of their respective owners.
Headquarters 8161 Maple Lawn Blvd, Suite 250 Fulton, MD 20759 United States • 1.877.866.2836
Virginia Office 8281 Greensboro Dr Suite 630 McLean, VA 22102
APAC Office 5 Martin Place, Level 14 Sydney 2000, NSW Australia
European Office 199 Bishopsgate London EC2M 3TY United Kingdom