- AdoptOpenJDK – Ensuring Free ™ for the Community

Presented By: Shelley Lambert (AdoptOpenJDK Committer, OpenJ9 Committer, IBM Runtimes Test Leader)

• The Basics • Brief History • Rationale • Roadmap Agenda And • Build Farm Tech The Basics • (JDK) consists of • Java Runtime Environment (JRE) • Tools to compile and debug Java code for developing Java applications.

What is Java? • JRE consists of: • Libraries • Java (JVM) • Java Plugin (!) and • The reference implementation (RI) from Java 7 SE onwards

• Free and open source • GNU General Public License, version 2, with the Exception What is • Source to build your own Java; both the OpenJDK? language and platform • Users like Twitter, Alibaba and have augmented the JDK with custom builds for their platforms

• Many commercial and community builds available • Oracle’s commercial JDK builds from OpenJDK and is evolving the two to be essentially identical. • IBM’s JDK is based on Eclipse OpenJ9, for Java OpenJDK is widely 8 and onwards, a single VM which runs across many versions. OpenJ9 can be built as a available via component of OpenJDK • Zulu® is Azul’s build of OpenJDK multiple distros • IcedTea is one of the earliest OpenJDK distros and builders and blends OpenJDK and GNU Classpath. • IcedTea is currently bundled default with GNU/ distributions such as Fedora, Gentoo and . goo.gl/PakfKi • AdoptOpenJDK is a build farm for OpenJDK binaries

• Fresh builds across many platforms, nightly. What is • Fully open-source; full transparency on the entire AdoptOpenJDK? pipeline, from host prep to testing and distribution.

• Consistent quality across all platforms.

History

+

https://www.slideshare.net/neomatrix369/adopt-openjdk-the-past-the-present-the-future Thorough testing is challenging...

Visibility of contributions

Current OpenJDK Discussions on incorrect mailing lists Difficulties Lots of work for reviewers AdoptOpenJDK build farm born from the desire to standardize build/test Evolution of JDK binaries. IBM open-sources their Java stack: ● OpenLiberty ● Eclipse OpenJ9 (IBM’s JVM built Enter Stage Left – upon Eclipse OMR) IBM and Eclipse ● AdoptOpenJDK, a natural place for Eclipse OpenJ9 community to build and distribute OpenJDK with & Distribution OpenJ9 binaries IBM donates its internal Java testing infrastructure to AdoptOpenJDK IBM donates ● In the space of weeks, AdoptOpenJDK is able to push out testing high quality binaries infrastructure AdoptOpenJDK grows to 60+ repos and 600+ volunteers in 6-9 months.

• A Technical Steering Committee is being formed to ensure quality and security Extreme Growth • Lots of community participation ● Build Test Deploy

● Nightly & Release Pipelines

● Nightly and Release binaries distributed on the AdoptOpenJDK website (+ via The Flow api.adoptopenjdk.net)

AdoptOpenJDK Example (Build, Test, Deploy)

OpenJDK Repo is cloned Build job is If build passes If test passes repo into Jenkins kicked off then the test then binary is is mirrored into suites are shipped GitHub kicked off AdoptOpenJDK Example (Build, Test, Deploy)

OpenJDK Repo is cloned Build job is If build passes If test passes mercurial repo into Jenkins kicked off then the test then binary is is mirrored into suites are shipped GitHub kicked off AdoptOpenJDK Example (Build, Test, Deploy)

OpenJDK Repo is cloned Build job is If build passes If test passes mercurial repo into Jenkins kicked off then the test then binary is is mirrored into suites are shipped GitHub kicked off AdoptOpenJDK Example (Build, Test, Deploy)

OpenJDK Repo is cloned Build job is If build passes If test passes mercurial repo into Jenkins kicked off then the test then binary is is mirrored into suites are shipped GitHub kicked off AdoptOpenJDK Example (Build, Test, Deploy)

OpenJDK Repo is cloned Build job is If build passes If test passes mercurial repo into Jenkins kicked off then the test then binary is is mirrored into suites are shipped GitHub kicked off GitHub Releases

• Free to use! • Releases can be made and binaries uploaded using the API. • Can have unlimited releases but the max file size is 2GB. Deploy (Jenkins pipelines / Github releases)

Standardized, open, Test (testkitgen / Jenkins pipelines) transparent at all Build ( / Jenkins pipelines) layers

Lab Machines (Ansible/Docker) Infrastructure https://github.com/AdoptOpenJDK/openjdk-infrastructure

• Playbooks in • Example use: • AdoptOpenJDK_Unix_Playbook dir: /Common /Debug /autoconf main.yml /roles /freemarker /Ant-Contrib /ccache … The Adopt Build Farm contains many machines, donated and funded by these generous groups:

The Farm & The Sponsors Build https://github.com/AdoptOpenJDK/openjdk-build

./ ./sbin/common/ configureBuild.sh config_init.sh (Coordinates configuration) Test https://github.com/AdoptOpenJDK/openjdk-tests

“Consolidate and Curate”

functional openjdk system external jck perf

testNG, jtreg STF & javatest Assorted cmdlinetester others benchmarks testkitgen Deploy https://github.com/AdoptOpenJDK/openjdk-build https://github.com/AdoptOpenJDK/openjdk-website-backend https://github.com/AdoptOpenJDK/openjdk-api

Binary is Sha256 sum is GitHub release Binary and GitHub API can compressed generated from tag is created Sha256 sum is be used to into tarball tarball uploaded to lookup GitHub download links

Source-controlled build pipelines.

- Github repository: https://github.com/AdoptOpenJDK/openjdk-build

This all sounds great! How do I get it?

• The Adopt OpenJDK project can be found https://adoptopenjdk.net/

• What is the community asking for? • Website download • “API gateway” allowing programmatic download (https://api.adoptopenjdk.net/README) • macOS brew package install • Docker images (including distro-less) Deploy (installers, more ways of getting binaries to the community)

Test Roadmap (test & triage smarter, analytics, fuzz testing, open perf)

(near-term plans) Build (exploit Docker for builds, faster build times, simplify)

Lab Machines (sanitize playbooks, automated ansible runs, on-demand hosting) How to participate?

Where can you help?

• Infrastructure (github.com/AdoptOpenJDK/openjdk-infrastructure) • Build (github.com/AdoptOpenJDK/openjdk-build) • Test (github.com/AdoptOpenJDK/openjdk-tests) • Deploy (openjdk-website/api/docker/installers)

• Overall guide to the repositories: github.com/AdoptOpenJDK/TSC Today we learned: • The Basics • Brief History • Rationale Summary • Roadmap And • Build Farm Tech More at EclipseCon Europe

Tuesday • Migrate Early, Migrate Often! JDK release cadence strategies – Theater 17:00

Wednesday • Performance Testing for Everyone – Theatre 11:55 • Adopt OpenJ9 for Spring Boot Performance – Silchersaal 14:00 • Are You Ready for Cloud Native Java – Sem. 5 16:30

Thursday • Why Kotlin is My Favorite Example of Functional Programming – Sem. 1-3 10:00 • Shaking Sticks and Testing OpenJDK Implementations – Sem. 5 14:00

adoptopenjdk.net AdoptOpenJDK/TSC @adoptopenjdk

AdoptOpenJD K