Write Once, Run Anywhere(WORA)는 썬 마이크로시스템즈에 의해 만들어진 자바를 홍보하기 위한 말이다. 자바는 플랫폼 독립적으로 설계되어 운영체제나 하드웨어에 상관없이 같은 코드를 동작시킬 수 있다.
앞에서 플랫폼 독립적이라는 말을 사용했다. 그 반대말인 플랫폼 종속적이라는 말은 무슨뜻일까. 예를들어 리눅스에서 개발한 C코드는 윈도우에서 실행되지 않는다. 그 이유는 다음과 같다.
우리가 만든 코드는 기계가 바로 읽을 수 없다. 기계가 읽을수 있는 언어는 기계어다. 우리가 짠 코드를 기계어로 바꾸는 과정을 컴파일 이라고 한다. 자바파일(.java)을 컴파일 한다. 컴파일 하면 바이트코드(.class)가 만들어진다. 이 코드는 cpu에 의해서 바로 실행되는것이 아닌 JVM(Java Virtual Machine)에 의해서 실행된다. JVM은 각 플랫폼에 꼭 맞게 만들어진다. 따라서 JVM은 플랫폼 종속적이다. 대신 JVM에 의해서 해석되는 바이트 코드가 어느 환경이나 동일한 결과를 보여준다.
JRE는 Java Runtime Environment로 JVM과 라이브러리, API등 실행에 필요한 환경을 제공한다. 컴파일된 자바코드를 실행시키기 위해서는 꼭 필요한 환경이라고 할 수 있다.
JDK는 Java Development Kit이다. JDK = JRE + 개발도구(디버거 등)이라고 생각하면 된다. JDK는 프로그램을 생성, 실행, 컴파일한다.