OpenJDK

**OpenJDK**(Open Java Development Kit)는 자바 플랫폼, 스탠더드 에디션(Java SE)의 자유 및 오픈 소스 구현체다. 이는 썬 마이크로시스템즈가 오라클에 인수되기 4년 전인 2006년에 시작한 노력의 결과물이다. 이 구현체는 GPL 링크 예외를 포함한 GNU 일반 공중 사용 허가서 2에 따라 라이선스가 부여되어, 자바 클래스 라이브러리에 연결된 구성 요소가 GPL 라이선스 조항의 적용을 받지 않도록 방지한다. OpenJDK는 버전 7부터 Java SE의 공식 참조 구현이며, 가장 인기 있는 JDK 배포판이다.

## 역사

### 썬의 약속과 초기 출시
썬은 자바원 2006에서 자바를 오픈 소스 소프트웨어로 만들겠다고 발표했으며, 2006년 10월 25일 오라클 오픈월드 컨퍼런스에서 조나단 슈워츠는 30일에서 60일 이내에 핵심 자바 플랫폼의 오픈 소스화를 발표할 계획이라고 밝혔다.

썬은 2006년 11월 13일에 자바 핫스팟 가상 머신과 컴파일러를 GNU 일반 공중 사용 허가서에 따른 자유 소프트웨어로 출시했으며, "썬이 GPL에 따라 소스 형태로 게시할 권리가 없는 몇 가지 구성 요소를 제외하고" 나머지 JDK(자바 런타임 환경 포함)를 2007년 3월까지 GPL 하에 둘 것을 약속했다. 자유 소프트웨어 옹호자 리처드 스톨먼에 따르면, 이는 자바와 자바로 작성된 프로그램에 적용된다고 주장했던 벤더 록인 현상인 "자바 함정"을 끝내는 것이었다.

### 클래스 라이브러리 출시
2007년 상반기에 거의 완전히 자유 및 오픈 소스 코드를 기반으로 하는 자바 개발 키트(JDK)를 출시하겠다는 약속에 따라, 썬은 2007년 5월 8일에 자바 클래스 라이브러리의 전체 소스 코드를 GPL 하에 공개했다. 다만 제3자가 썬에 라이선스를 부여하여 썬이 GPL로 재라이선스할 수 없었던 일부 제한된 부분은 제외되었다. 제한된 부분 목록에는 자바 그래픽 사용자 인터페이스(GUI)의 여러 주요 구성 요소가 포함되어 있었다. 썬은 남은 사유 소프트웨어 구성 요소를 대체 구현체로 바꾸고 클래스 라이브러리를 완전히 자유롭게 만들 계획이라고 밝혔다.

2007년 5월 처음 출시되었을 때 OpenJDK 클래스 라이브러리의 4%가 사유 소프트웨어로 남아 있었다. 2008년 5월 OpenJDK 6가 등장할 때까지 1% 미만(자바 사양의 일부가 아닌 SNMP 구현체 등)만 남게 되어, 바이너리 플러그 없이 OpenJDK를 빌드하는 것이 가능해졌다. 바이너리 플러그 요구 사항은 이후 2009년 4월 b53의 일부로 OpenJDK 7에서 제거되었다.

이는 첫해 동안 썬 마이크로시스템즈와 OpenJDK 커뮤니티의 노력으로 가능해졌다. 각 제한 사항은 자유-오픈 소스 소프트웨어로 출시되거나 대체물로 교체되었다. 2010년 12월부터 모든 이른바 바이너리 플러그가 오픈 소스 소프트웨어로 대체되어 전체 JDK가 오픈 소스화되었으며 바이너리 플러그가 더 이상 필요하지 않게 되었다.

### 커뮤니티 개선 사항
2007년 11월 5일, 레드햇은 썬의 광범위한 기여자 동의서(모든 레드햇 엔지니어가 썬이 주도하는 모든 자유 및 오픈 소스 소프트웨어 프로젝트에 참여하는 것을 포함)와 썬의 OpenJDK 커뮤니티 기술 호환성 키트(TCK) 라이선스 계약(OpenJDK 기반 프로젝트가 Java SE 6 사양을 준수하는지 확인하는 테스트 스위트에 대한 접근 권한을 부여함)에 서명하며 썬과 합의했다고 발표했다.

또한 2007년 11월에는 OpenJDK를 다양한 프로세서 아키텍처와 운영체제로 포팅하는 노력을 돕기 위해 Porters Group이 OpenJDK에 창설되었다. 커트 밀러와 그렉 루이스가 이끄는 BSD 포팅 프로젝트와 랜던 풀러가 이끄는 Mac OS X 포팅 프로젝트(BSD 기반)가 Porters Group을 통해 OpenJDK에 합류할 의사를 표명했다. 2008년 1월 현재 두 프로젝트 모두 메일링 리스트 논의에 참여하고 있다. Porters Group에서 공식화를 기다리고 있는 또 다른 프로젝트는 브라이언 바너가 이끄는 하이쿠 자바 팀이다.

2007년 12월, 썬은 OpenJDK의 버전 관리를 TeamWare에서 머큐리얼(나중에 깃 및 깃허브로)로 옮겼다. 이는 오픈 소스 소프트웨어 커뮤니티에 공개하는 과정의 일환이었다.

OpenJDK는 코드 기여를 수락하는 절차가 비교적 엄격하다. 제안된 모든 기여는 다른 OpenJDK 커미터의 검토를 받아야 하며 기여자는 Sun/Oracle 기여자 동의서(SCA/OCA)에 서명해야 한다. 가급적 버그가 수정되었음을 입증하는 jtreg 테스트도 동반되어야 한다. 초기에는 외부 패치 제출 프로세스가 느렸고, 2008년 9월까지 코드베이스에 대한 커밋은 썬 엔지니어들에 의해서만 이루어졌다. 현재 프로세스가 개선되어 2010년 기준 OpenJDK 7에서 OpenJDK 6로의 간단한 패치 및 백포트는 며칠이 아닌 몇 시간 내에 이루어질 수 있다.

2011년에는 OS/2용 OpenJDK 6.0의 비공식 포트가 처음 출시되었다. 이 포트는 OS/2 파생형인 ArcaOS에 포함되어 있다.

2013년 9월 25일, 마이크로소프트와 Azul Systems는 협력하여 윈도우 애저 클라우드 사용자를 위한 OpenJDK 빌드인 Zulu를 만들었다. Zulu는 커뮤니티 사이트 Zulu.org에서 무료로 다운로드할 수 있다. 또한 캐노니컬의 Juju Charm 스토어, 도커 허브, 그리고 Azul Systems 저장소를 통해 아마존 웹 서비스에서도 Zulu를 얻을 수 있다. Azul은 버그 수정 및 향상된 기능을 OpenJDK 프로젝트에 다시 기여하며 직원 중에 여러 프로젝트 커미터를 보유하고 있다. 레드햇은 2017년 초 OpenJDK 6의 리더십을 사임했으며 이후 Azul Systems가 이를 이어받았다.

2016년 4월부터 깃허브의 ojdkbuild 프로젝트에 마이크로소프트 윈도우용 OpenJDK의 지원되지 않는 커뮤니티 빌드가 있으며, 이는 오라클 JDK의 업데이트 속도에 맞춰 출시된다. 빌드 8u151부터 MSI 설치 프로그램은 IcedTea-Web 프로젝트를 기반으로 한 자바 웹 스타트를 사용하기 위한 선택적 구성 요소를 제공한다.

2020년에는 아이테니엄 플랫폼의 OpenVMS용 OpenJDK 8 포트가 출시되었다.

프로젝트 시작 이후 OpenJDK에 대한 외부 기여 횟수는 증가하고 있다. 2018년 9월에 출시된 OpenJDK 11은 20%의 외부 수정을 받았으며 17개의 새로운 JEP(기능)를 가져왔는데, 그중 3개는 커뮤니티에서 기여한 것이다. 구체적으로 JEP 315: "Aarch64 고유 기능 개선"(BellSoft 기여), JEP 318: "Epsilon: 무동작 가비지 컬렉터"(레드햇 기여), JEP 331: "낮은 오버헤드 힙 프로파일링"(구글 기여) 등이 있다.

### IBM, 애플, SAP와의 협력
2010년 10월 11일, 아파치 하모니 프로젝트의 가장 큰 참여자였던 IBM은 오라클의 OpenJDK 프로젝트에 합류하기로 결정했으며, 사실상 노력을 하모니에서 OpenJDK로 전환했다. IBM의 리눅스 및 오픈 소스 책임자인 밥 수토르는 블로그를 통해 "IBM은 개발 노력을 아파치 프로젝트 하모니에서 OpenJDK로 전환할 것"이라고 밝혔다.

2010년 11월 12일, 애플(자체 자바 런타임 포트의 지원 중단을 발표한 지 불과 3주 만에)과 오라클 코퍼레이션은 Mac OS X용 OpenJDK 프로젝트를 발표했다. 애플은 32비트 및 64비트 핫스팟 기반 자바 가상 머신, 클래스 라이브러리, 네트워킹 스택 및 새로운 그래픽 클라이언트의 기반을 포함하여 Mac OS X에서 Java SE 7 구현에 필요한 대부분의 주요 구성 요소, 도구 및 기술을 기여할 것이다.

2011년 1월 11일 OpenJDK에 Mac OS X Port 프로젝트가 생성되었으며, 애플은 프로젝트에 첫 번째 코드를 공개적으로 기여했다. 초기 애플 기여분은 OpenJDK BSD 포트를 기반으로 구축되었다.

2011년 7월, SAP AG는 SAP가 공식적으로 OpenJDK 프로젝트에 합류했다고 발표했다.

## 구성 요소
OpenJDK 프로젝트는 여러 구성 요소를 생산한다. 가장 중요한 것은 가상 머신(핫스팟), 자바 클래스 라이브러리 및 자바 컴파일러(Javac)다.

오라클 자바의 일부를 구성하는 웹 브라우저 플러그인과 자바 웹 스타트는 OpenJDK에 포함되어 있지 않다. 썬은 이전에 이러한 구성 요소를 오픈 소스화하려고 시도할 것이라고 밝혔으나, 썬이나 오라클 코퍼레이션 모두 그렇게 하지 않았다.
현재 2016년 기준으로 사용 가능한 유일한 자유 플러그인 및 웹 스타트 구현체는 IcedTea에서 제공하는 것들이다.

OpenJDK 9 이상은 GraalVM을 사용한 AOT 컴파일(AOT compilation)()을 지원한다(JEP 295). 실험적인  플래그는 Graal JIT의 사용을 가능하게 한다(JEP 317).

## OpenJDK 버전
OpenJDK는 처음에 자바 플랫폼의 JDK 7 버전에만 기반을 두었다.

JDK 10부터 Java SE 플랫폼의 오픈 소스 참조 구현체를 생산하는 노력은 JDK 프로젝트로 옮겨졌다. 단 하나의 기능 릴리스만 생산하고 종료되었던 과거 JDK 릴리스 프로젝트와 달리, 이 장기 실행 프로젝트는 미래의 모든 JDK 기능 릴리스를 생산할 것이며 엄격한 시간 기반 모델에 따라 6개월마다 기능 릴리스를 출시할 것이다.

## OpenJDK 빌드
오라클이 더 이상 허용적인 라이선스로 장기 지원 버전(LTS) 릴리스에 대한 업데이트를 출시하지 않음으로 인해, 다른 조직들이 정기 및 장기 지원 조건으로 자체 빌드를 게시하기 시작했다. 많은 리눅스 배포판과 마이크로소프트 윈도우를 포함한 많은 운영 체제는 자체 패키지 관리자를 통해 자체 빌드를 제공한다.

## IcedTea 및 소프트웨어 배포판 포함

페도라 및 기타 자유 소프트웨어 리눅스 배포판에 OpenJDK를 묶으려면, OpenJDK가 자유 소프트웨어 구성 요소만을 사용하여 빌드될 수 있어야 했다. 자바 클래스 라이브러리의 사유 소프트웨어 구성 요소와 OpenJDK를 빌드하는 데 사용되는 JDK가 썬 JDK여야 한다는 빌드 시스템 내의 암시적 가정 때문에 이는 불가능했다. 완전한 개방성을 달성하기 위해 레드햇은 2007년 6월에 IcedTea 프로젝트를 시작했다.
이 프로젝트는 OpenJDK/GNU 클래스패스 하이브리드로 시작되어 OpenJDK를 부트스트랩하는 데 사용될 수 있었으며, 제한된 부분들을 GNU 클래스패스의 코드로 대체했다.

2007년 11월 5일, 레드햇은 썬 기여자 동의서와 OpenJDK 커뮤니티 TCK 라이선스에 모두 서명했다. 이 계약의 첫 번째 이점 중 하나는 리눅스 배포판인 페도라와 애플리케이션 서버 기술인 JBoss를 리눅스 환경으로 통합하는 IcedTea 프로젝트와의 긴밀한 연계였다. IcedTea는 OpenJDK 프로젝트에 남아 있던 소수의 사유 섹션에 대해 자유 소프트웨어 대안을 제공했다.

2008년 5월, 페도라 9 및 우분투 8.04
배포판에는 완전히 자유 소프트웨어 및 오픈 소스 소프트웨어 코드를 기반으로 하는 IcedTea 6가 포함되었다. 페도라 9는 OpenJDK 7 대신 썬의 OpenJDK 6 소스를 기반으로 하는 IcedTea 6를 탑재한 첫 번째 버전이었다. 또한 IcedTea 대신 OpenJDK 상표 계약을 통해 패키지 이름으로 OpenJDK를 사용한 최초의 버전이기도 했다. 우분투 또한 처음에 IcedTea 7을 패키징했으나 나중에 IcedTea 6로 옮겼다. IcedTea 6용 패키지는 데비안용으로도 제작되어 Lenny에 포함되었다. 2008년 7월 12일, 데비안은 unstable 버전에 OpenJDK-6를 수락했으며, 이후 stable 버전에 포함되었다. OpenJDK는 오픈수세, 레드햇 엔터프라이즈 리눅스 및 CentOS와 같은 RHEL 파생 제품에서도 사용할 수 있다.

2008년 6월, 레드햇은 IcedTea 6를 사용하여 빌드된 페도라 9용 OpenJDK 패키지 바이너리가 Technology Compatibility Kit 테스트를 통과했으며 완전히 호환되는 자바 6 구현체라고 주장할 수 있다고 발표했다. 2009년 7월, 우분투 9.04용 IcedTea 6 바이너리 빌드가 Java SE 6 TCK의 모든 호환성 테스트를 통과했다.

2008년 8월부터 OpenJDK 7을 macOS 및 기타 BSD 변형에서 사용할 수 있게 되었다.

안드로이드 누가에서 OpenJDK는 모바일 운영체제의 소스 코드에서 자바 라이브러리로서 현재 중단된 아파치 하모니를 대체했다. 구글은 하모니를 통해 저작권이 있는 자바 API를 재구현하여 저작권 및 특허를 침해했다는 주장을 두고 오라클과 법적 분쟁 중이었다. 구글은 이 변경이 안드로이드와 다른 플랫폼의 자바 사이에 보다 일관된 플랫폼을 만들기 위한 것이라고 밝히는 한편, 이 전환이 소송에 의해 동기 부여되었음을 인정하며 오라클이 OpenJDK 코드를 GPL 하에 라이선스함으로써 그 사용을 승인했다고 주장했다.

## 같이 보기
* GNU 클래스패스
* GCJ
* 아파치 하모니

## 각주

## 외부 링크
* 
* OpenJDK – The First Year  by Mark Reinhold
* Zero and Shark: a Zero-Assembly Port of OpenJDK

분류:자바 (프로그래밍 언어)
분류:자바 라이브러리
분류:자바 플랫폼
분류:자바 가상 머신
분류:C++로 작성된 자유 소프트웨어
분류:자바로 작성된 자유 소프트웨어
분류:자유 가상화 소프트웨어