출처: https://mond.tistory.com/entry/안드로이드는-리눅스-기반이다 [강몬드의 프로그래밍 이야기]
본 게시글은 위 게시글을 바탕으로 필자가 이해한 내용을 바탕으로 재해석하였습니다.
1. Android is Based on Linux, But What Does That Mean?
안드로이드는 리눅스 기반이지만, 데스크탑에서 사용된 리눅스 시스템의 기반은 아니다. 리눅스 데스크탑용 배포판 운영체제에서 안드로이드 앱( Application: App)을 실행할 수 없고, 리눅스 프로그램들 또한 안드로이드에서 사용할 수 없다.
리눅스는 안드로이드의 핵심 요소이지만, 안드로이드를 개발한 구글은 리눅스에서 사용되는 소프트웨어와 라이브러리를 안드로이드에 전부 추가하지는 않았다. 그렇기 때문에 리눅스 프로그램들을 안드로이드에서 사용할 수 없는 것이다.
요약하자면 안드로이드는 리눅스의 일부분을 참고하여 만든 새로운 운영체제라 생각하면 된다.
2. “Linux” vs. The Linux Kernel
안드로이드와 리눅스의 차이가 리눅스가 의미하는 바이다. 사람들이 말하는 "리눅스"라는 단어는 여러가지 의미로 사용되어진다. 보통의 경우엔, 리눅스는 리눅스 커널을 의미한다. 그리고 커널은 운영체제의 핵심 요소이다.
우리는 리눅스 배포판도 간단하게 "리눅스"라고 생각한다. 그러나, 리눅스 배포판은 리눅스 커널이 아니다. 리눅스 배포판은 사용자의 편의를 위해 다양한 소프트웨어(GNU shell utilities, Xorg graphical server, GNOME desktop, Firefox web browser, 등등)를 포함하고 있다. Ubuntu, Mint, Debian, Fedora, Arch, openSUSE, 등등의 것들을 "리눅스 배포판"이라고 한다.
안드로이드는 리눅스 커널을 사용하고 있다. 리눅스 커널은 오픈 소스(open source)이고, 구글의 안드로이드 개발자들이 리눅스 커널을 본인들의 필요에 따라 수정할 수 있다.
이 글을 읽는 사람이 안드로이드 기기를 쓰고 있다면, 지금 바로 리눅스 커널 버전을 확인할 수 있다.
본인의 모바일이나 태블릿 내의 안드로이드 환경설정 화면에서 리눅스 커널 버전을 확인하면 된다.
3. The Differences
안드로이드는 일반적인 "리눅스 배포판"에서 사용되는 많은 소프트웨어를 포함하지는 않지만, 리눅스 커널을 사용하고 다른 소프트웨어를 사용한다. 이게 바로 안드로이드와 리눅스의 차이이다.
안드로이드 장치를 부팅할 때, 리눅스 배포판처럼 리눅스 커널이 실행이 된다. 그러나 안드로이드는 일반적인 리눅스 배포판에서 사용하는 GNU C 라이브러리(glibc)를 사용하지 않고, 리눅스 GNU 라이브러리들 또한 사용하지 않는다. 또한, Xorg와 같은 X 서버도 없어서 리눅스 어플리케이션도 실행할 수 없다.
즉, 일반적으로 리눅스에서 어플리케이션을 실행하는 것과 달리, 안드로이드는 달빅 가상 머신을 통해 자바 프로그래밍 언어로 개발된 어플리케이션들을 실행한다. 즉, 이 어플리케이션들은 안드로이드 장치에 구체화돼있다.
4. Why You Can’t Run Desktop Linux Software on Android
안드로이드는 리눅스에서 사용하는 X server나 GNU 라이브러리 또한 없기 때문에 리눅스 용 어플리케이션은 안드로이드에서 실행할 수 없다. 그래서 안드로이드에 구체화된 어플리케이션을 실행해야 한다.
안드로이드에서 리눅스에서 볼 수 있는 shell을 설치할 수 있다. 이 shell을 안드로이드에서 사용하려면, "Android Terminal Emulator"라는 어플리케이션을 설치하고 터미널 환경을 사용할 수 있다.
이처럼 안드로이드에서는 제한적인 환경이기 때문에, 터미널을 사용해서도 할 수 있는게 많지는 않다. 리눅스 배포판 터미널 창에서 루트 권한을 얻는 건 로그인 정보 알면 쉽게 얻을 수 있다. 그러나 안드로이드에선 이 또한 쉽지가 않다. 디바이스 루팅 작업 없이는 루트 권한을 얻을 수 없다. 터미널 창에서 실행하려는 대부분의 명령어들은 사용할 수 없다. - 그래서 사람들이 안드로이드 기기에서 루팅을 하려고 하나보다.-
5. Why You Can’t Run Android Software on Desktop Linux
반대로, 리눅스는 안드로이드와 달리 달빅 가상 머신이 없다. 그래서 짐작하건대로 리눅스에서는 안드로이드 어플리케이션을 실행할 수 없다. 달빅 가상 머신을 포함해서 다른 안드로이드 소프트웨어들을 리눅스에 올리는건 쉽지 않다. 이론적으로는, 경험이 충분한 개발자들이 리눅스 데스크탑에 달빅을 설치하고 안드로이드 어플리케이션을 실행한다. 리눅스 배포판 중 하나인 Ubuntu에서 안드로이드를 위해 잠정적으로 위와 같은 개발을 진행 중이다.
다른 방법으로는 블루스택(BlueStacks)을 비롯한 안드로이드 앱 에뮬레이터들이 가상 머신 내의 가상 하드웨어에서 안드로이드를 사용한다. 성능의 한계가 존재해서 별로 좋은 방법은 아니다.
구글 크롬 운영체제 또한 리눅스 기반이다. 안드로이드 처럼, 크롬 운영체제는 X 윈도우 시스템을 제공하지 않아서 리눅스 용 어플리케이션을 실행할 수 없다. 그러나 안드로이드와 다르게 크롬 운영체제는 리눅스 배포판과 유사하기도 한데, 개발자 모드로서 리눅스 배포판용 소트프웨어를 설치할 수 있다.