[운영체제] 모든 운영체제에서 실행가능한 프로그램을 만들 수 있을까?(Cross-Platform Application Program?)

참고도서: Operating System Concepts (10/E) Abraham Silberschatz, Peter B. Galvin, Greg Gagne

Application Program in All OS?

우리가 사용하는 컴퓨터 시스템은 다양한 운영체제의 종류가 있다. 그리고 모든 application programdms 각 운영체제에 맞게 설계되고 개발되어져 있다. 하나의 응용프로그램이 여러 운영체제에서 동시에 사용되도록 만드는게 가능할까? 결론부터 말하자면, 가능하지만 조건부로 가능하다고 말하고 싶다.

각 운영체제는 독자적인 system call의 집합을 가지고 있다. 운영체제끼리 비슷한 system call를 가지고 있을 수는 있지만 완벽하게 동일하게 구성되어 있다면, 그건 두 운영체제가 다른 운영체제라고 말하기 어려운 것이다. 하지만 몇개의 방법을 통해서 여러 운영체제에서 동작하도록 하는 것이 가능하긴 하다.

Interpreter Language Based Program

어떤 프로그램이 인터프리터 언어로 작성되었다면, 여러 운영체제에서 실행되는게 가능해진다. 인터프리터는 소스코드 전체를 해석해서 하나의 실행파일을 만드는 방식이 아니라 소스 프로그램의 각 라인을 읽어서 그에 맞는 명령과 system call을 운영체제에서 실행하게 된다. 따라서 어떤 system call을 사용해야 한다고 정해져 있는 소스가 아니기 때문에 운영체제 마다 동일한 명령이 수행될 수 있다. 하지만 운영체제의 인터프리터는 운영체제의 일부 기능만 사용할 수 있기 때문에 응용 프로그램의 기능이 제한될 수 있다는 단점이 있다.

Use Virtual Machine(Runtime Environment)

어떤 프로그래밍 언어로 작성된 응용프로그램은 해당 프로그램을 담는 Runtime Environment 를 가지고 있다. 가장 흔하게 우리가 사용하는 부분이 Java 응용프로그램에서 지원하는 JVM, 자바 가상머신이다. 가상머신 위에서 응용프로그램이 실행되기 때문에 이런 RTE를 지원하는 운영체제라면 어디서든 사용할 수 있다는게 큰 장점이다.

Use API

응용프로그램 개발자가 각각의 응용프로그램이 운영체제 환경에 맞게 컴파일 될 수 있도록 컴파일러에 API나 표준 언어를 만들어 사용하는 방법도 있다. 그런데 이 방법은 시간이 정말 많이 들어가는 일이고, 운영체제가 업데이트 될 때마다 새로운 요소를 이식해줘야하는 번거로움이 있다.

구조적으로 모든 운영체제에서 작동하는 응용프로그램을 만드는 것은 불가능하지만, 프로그램의 이진 코드가 운영체제가 상호작용하는 방법을 정의하는 것을 통해 어느정도는 해결할 수 있다. 우리가 API를 사용해서 응용 프로그램의 특정 기능을 지정하는 것처럼 이진 코드의 운용방법을 작성한 것을 ABI(Application Binary Interface) 라고 한다.


Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.