운영체제 로고 | |
개발자 | |
기반 | Linux |
개발 언어 | Node.js |
오픈 소스 여부 | |
라이선스 | MIT License |
최신 버전 | |
유지 버전 | |
개발 버전 | |
플랫폼 | |
홈페이지 | |
1. 개요
Node.js를 기반으로 한 실험적 운영체제 프로젝트로, Linux 커널 위에 JavaScript 런타임을 적용하여 시스템 전반의 기능과 애플리케이션을 모듈화된 방식으로 제공하는 것을 목표로 한다.NodeOS는 전통적인 운영체제와 달리, 사용자 공간의 모든 애플리케이션과 도구들이 Node.js 모듈로 구성되어 개발자가 익숙한 JavaScript 환경에서 시스템을 제어할 수 있도록 설계되었다. 이로 인해 시스템 기능의 확장 및 수정이 보다 유연해지는 장점을 가진다.
2. 특징
JavaScript 중심 개발: 시스템 애플리케이션과 스크립트가 모두 JavaScript로 작성되어, 개발자가 하나의 언어로 시스템 전반을 관리할 수 있다.
모듈화된 아키텍처: Node.js의 모듈 시스템(npm)을 활용하여 운영체제의 각 기능을 플러그인 형태로 쉽게 추가하거나 수정할 수 있다.
경량화 및 유연성: 불필요한 기능을 최소화하고 필요한 기능만 선택적으로 로딩하는 구조로 설계되어 효율성을 극대화한다.
개발자 친화적 환경: Node.js와 npm의 방대한 생태계를 그대로 활용, 다양한 오픈 소스 패키지와 도구를 시스템 개발에 즉시 이용할 수 있다.
3. 역사
NodeOS 프로젝트는 2013년경, JavaScript의 범용성과 Node.js의 인기를 바탕으로 시작되었다. 초기에는 실험적 프로젝트로 출발하였으나, 오픈 소스 커뮤니티 내에서 다양한 기능과 확장 모듈이 추가되며 점차 발전하였다.4. 아키텍처
NodeOS의 기본 구조는 Linux 커널 위에 Node.js 런타임을 올려 사용자 공간을 구성하는 형태를 띤다.Linux 커널: 하드웨어와의 인터페이스, 메모리 관리, 프로세스 스케줄링 등 기본 시스템 자원 관리를 담당한다.
Node.js 런타임: 사용자 공간에서 애플리케이션을 실행하고, OS 기능을 JavaScript로 구현할 수 있도록 지원한다.
npm 기반 모듈 시스템: 각 기능을 독립적인 모듈로 분리하여 관리하며, 새로운 기능 추가 및 업데이트가 용이하도록 설계되었다.
5. 장단점
5.1. 장점
일관된 개발 환경: 단일 언어(JavaScript)를 사용함으로써 시스템 개발 및 유지보수가 상대적으로 간편하다.높은 확장성: 모듈 단위 구성으로 필요한 기능을 쉽게 추가하거나 수정할 수 있다.
풍부한 오픈 소스 생태계 활용: npm을 통한 다양한 패키지와 도구들을 즉시 활용할 수 있다.
5.2. 단점
개발 진입 장벽: 시스템 프로그래밍에 익숙하지 않은 개발자에게는 새로운 패러다임이 다소 어려울 수 있다.실험적 프로젝트의 한계: 상용화나 대규모 배포를 위한 완성도 및 지원 측면에서 아직 제한적이다.
5.2.1. 성능 및 안정성 이슈
사실상 제일 독보적인 문제라고 할 수 밖에 없다.마치 실험적 프로젝트라고 해서 매우 엄청난 패러다임을 선보이는 거라고 생각하지만, 이미 전례가 있고, 단점 조차 비슷하다고 할 수 있다.
애초에 구성부터 성능과 안정성이 이슈가 나올 수 밖에 없다.
일반적인 리눅스 운영체제와 다르게, nodeOS는 systemd 대신 node를 PID 1으로 이용된다.
이를 달리 설명하면, node.js에서 이상이 발생하여 종료된다면, 시스템 전체가 내려가버린다는 것이다.
물론 당연하게도, 패키지 설치가지고 쉽게 내려가기는 어렵겠지만, 알다시피 애초에 네이티브 시스템 관리하라고 만든 시스템이 절대 아니다. 애초에 이걸 고려한 것이 절대 아닌데, 어떤 side effect가 발생할지 절대 알 수 없다. 좀 더 극단적으로 설명해보자면, 어떤 사람이 운영체제의 시스템을 DB화 시키고 싶다고 MySQL을 Linux에 접목 시키는 것과 다르지 않다
MySQL에도 다양한 Exception이 있는데, 이를 네이티브 시스템에 Critical한 Issue를 발생시키지 않고, 처리할지부터 이미 관건이다.
그리고 이건 Node도 마찬가지다.
Node에서 특정 함수가 Native에 영향이 간다면, 이 부분에 어떻게 처리를 해야할지 고민해야한다. 만약 process.exit 때문에, Node가 꺼지면, 어떻게 처리할까에 대해서도 고민해야한다.
물론 방법이 없는 건 아니다. Javascript 런타임와 Node.js를 시스템 관리 할 수 있을 안정성이 갖도록, 포크하고 마개조를 하면 된다.
물론 이렇게 되면, 기존 Node.js와의 호환성은 장담할 수 없다.