2023-09-17 작성

Oracle JDK와 Open JDK 차이점 (feat. Java 유료논쟁)

자바는 어디에서나 실행할 수 있도록 개발된 프로그래밍 언어이다. 최초 썬 마이크로시스템즈에서 출시된 이후, 2010년 오라클에서 자바를 인수하게 되었다.

몇 년 전 '자바가 유료화가 된다(!)'는 뜨거운 논쟁이 있었다. 결론부터 말하자면 자바 언어는 GPL 라이선스로 무료이다. 그렇다면 어떤 것이 유료화가 된다는 것일까? 바로 JDK이다.

JDK

자바 언어로 애플리케이션을 개발하려면 JDK 설치는 필수적이다. JDK(Java Development Kit)는 컴파일러, 디버깅 등 자바 애플리케이션 개발에 필요한 툴이 포함되어 있으며, 자바 실행환경인 JRE와 가상머신인 JVM도 포함되어 있다.

Java 프로그램을 실행하기 위해서는 아래의 핵심 기능이 필요하다.

  • Java로 작성한 프로그램을 컴파일해 주는 JDK
  • 컴파일된 결과물을 실행시켜 주는 JVM

JDK에 JVM이 같이 패키징 되어 배포되는 구조라, 보통 JDK, JVM을 합쳐 JDK라 부르는데 이 JDK가 유료화되는 것이다. 즉 Java 언어를 사용하는 건 무료지만, 이를 실행시키기 위한 컴파일과 실행머신이 유료라는 것이다.

이러한 JDK는 크게 Oracle JDK와 OpenJDK로 나뉘는데, 이중 Oracle JDK가 유료화 정책을 펼치고 있다.

Oracle JDK

오라클(Oracle)이 자바를 인수했기 때문에 Oracle JDK라는 이름으로 부른다. 오라클에서 내놓는 LTS 장기 지원 버전은 다음과 같다.

  • Java SE 8 - 2014년 출시
  • Java SE 11 - 2018년 출시
  • Java SE 17 - 2021년 출시
  • Java SE 21 - 2023년 출시

오라클이 배포하는 Oracle JDK는 상업 라이선스로 2019년부터 유료화 정책을 강화시켰다. 그렇다고 Oracle JDK를 쓰면 무조건 돈을 내야 하는 것은 아니다. Oracle JDK는 BCL 라이선스를 적용하고 있는데, 이 라이선스는 '일반적인 목적의 컴퓨팅(General Purpose Computing)'에 사용 시에만 무료라고 밝히고 있다.

여기서 말하는 일반적인 목적의 컴퓨팅이란 데스크톱, 노트북, 스마트폰, 태블릿 등에서의 사용인 것인데 즉, 개인이 학습이나 테스트 목적으로 개인의 디바이스에 사용하는 건 문제가 없다는 말이다. 

반대로 특정 기능만을 위해 작동하는 시스템 및 솔루션에서 사용하는 것은 '일반적이지 않은 목적의 컴퓨팅'이라 규정하고 있는데, 이 표현이 모호하여 대부분의 상업 프로젝트를 진행하는 회사의 경우 라이선스 비용을 지불한다고 생각하는 게 좋다.

그렇지만 모든 OracleJDK가 유료인 것은 아니고, 상업 프로젝트일 경우에도 JDK 8u202 버전까지는 무료로 제공해 주며, JDK 8u211 이상부터는 유료 버전이다.

참고로 2021년부터 오라클의 Java SE 정책이 변화되었다. Oracle JDK 17부터 새로운 NFTC 라이선스를 도입하여 Oracle JDK를 다시 무료로 만들었다. 상용에도 무료로 사용 가능하게끔 라이센스를 추가한 셈인데... 공개 업데이트 기간에는 Oracle JDK 17을 무료로 사용 가능하지만, 그 이후에는 다시 구독 비용을 내는 것 같다. 

Oracle JDK를 다운받으려면 오라클 홈페이지에서 원하는 버전으로 설치하면 된다. 

OpenJDK

OpenJDK는 JDK (Java SE 에디션)을 무료 오픈소스로 구현한 것이다. Sun Microsystems가 2006년부터 시작한 개발의 결과물이다. OpenJDK는 GPL v2 with the Classpath Exception 라이선스가 적용되어 무료이다.

OpenJDK 공식 홈페이지는 https://openjdk.org/ 이지만, OpenJDK를 다운로드할 수 있는 곳은 엄청 많다. 오라클이 만든 OpenJDK, Adoptium이 만든 Eclipse Temurin 등...

자세히 설명하자면, 공식 홈페이지에서는 배포가능한 빌드가 아닌 소스 코드만 제공한다. Java SE 에디션의 오픈소스 구현체이지만, 소스 코드만 제공하는 것이다. (ex. 특정 OS에 맞게 컴파일된 Java 명령어가 포함된 .zip 파일)

실제 배포본은 여러 벤더들이 제공한다. 여러 상업벤더들은 제공된 소스코드로 빌드를 만들고, 인증을 받은 다음, 배포한다. 오라클, 레드햇, 알리바바 등 많은 벤더들이 구현체 개발에 참여하여 다양한 종류의 OpenJDK가 존재하고 무료 배포되고 있는 것이다.

이때 벤더들은 본인들의 OpenJDK를 빌드하기 전에, 유용하다고 판단되는 유틸리티를 추가할 수 있다. 즉, 공식 홈페이지에서 제공한 원본 소스코드를 토대로, 유틸을 추가하는 등 본인들의 입맛에 맞게 재구성했다고 볼 수 있다. (그 외에는 원본 소스 코드는 모든 Java 배포판에서 동일하다.)

따라서 벤더사별로 많은 OpenJDK 배포판이 존재하기 때문에 선택장애가 올 수 있는데, 기본 추천은 Adoptium의 Eclipse Temurin 17를 추천한다. 

아래 표는 OpenJDK 벤더 목록인데 자주 언급되는 빌더사를 빨간색으로 표시했다.

OpenJDK vs. Oracle JDK

기본적으로 Oracle JDK와 OpenJDK 간의 코드 변경이 거의 없기 때문에 기능적으로 매우 유사하다. 둘의 차이점을 적어보자면 아래와 같다.

  • Oracle JDK는 상용(유료), OpenJDK는 오픈소스 기반(무료)
  • Oracle JDK의 라이선스는 Oracle BCL(Binary Code License) Agreement, OpenJDK의 라이선스는 Oracle GPL v2
  • Oracle JDK는 LTS(장기 지원) 업데이트 지원을 받을 수 있지만, OpenJDK는 LTS 없이 6개월마다 새로운 버전 배포
  • Oracle JDK는 Oracle이 인수한 Sun Microsystems 플러그인을 제공하지만, OpenJDK는 제공하지 않음

어떤 JDK를 선택해야 할까?

둘 다 Java SE 사양과 호환되는 코드로 작동하기 때문에, 어떤 JDK가 더 유용할지 결정하여 마이그레이션을 진행하는 것은 전적으로 사용자에게 달려 있다.

과거에, OpenJDK가 Oracle JDK보다 성능이 떨어진다는 이슈가 있었다. 과거 Jave SE 6 버전의 OpenJDK는 백포트 방식으로 구현되어 성능 저하 이슈가 존재했다. 이로 인해 상대적으로 OpenJDK의 성능이 떨어질 것이라는 인식이 생겼는데, Java SE 7부터 모든 JDK는 OpenJDK 레퍼런스 소스 코드를 기반으로 제작되도록 변경되어 두 JDK 간에 성능차이가 거의 없어졌다.

일반적인 서버 애플리케이션이나 오픈소스 솔루션은 OpenJDK로도 운영이 가능하기 때문에 굳이 돈 주고 Oracle JDK를 쓸 필요는 없다고 생각한다.

다만, Java 8과 같은 Oracle JDK의 이전 버전에서 마이그레이션 하는 경우, 애플리케이션이 내부 및 불특정 API를 사용하여 구축되었다면 OpenJDK 코드 베이스의 일부가 아닐 수 있다.

또한 글꼴 라이브러리나 Java Web Start와 같이 Oracle의 플러그인 기능을 써야 하는 경우에도 OpenJDK에는 해당 플러그인이 제공되지 않기 때문에 쓸 수 없다.

References