나빌레라

코딩이 취미인 개발자. 미국 캘리포니아 산호세 살고 있음.

현재까지 책을 세 권 썼다. RTOS 주제로 두 권. 컴퓨터 구조론 주제로 한 권이다.

도전! 임베디드 OS 만들기

출판사 : 인사이트
출판년도 : 2009

대학생때 쓴 책이다. 책이 출간된건 졸업한 후지만 원고는 학부 4학년 때 썼다. 학부 3학년 때 삼성 소프트웨어 멤버십에서 내부 프로젝트로 RTOS를 만들었다. 그리고 그 프로젝트를 진행했던 경험을 바탕으로 내가 독자적으로 RTOS 커널을 다시 작성했다. RTOS 커널을 다시 작업하면서 작업 일지를 KLDP에 올렸다. 내가 생각했던 것보다 많은 사람들이 해당 시리즈 게시물을 읽었다. 그래서 인연이 닿아 인사이트 출판사에서 출판했다.

실무 경험이 없는 학생 시절에 만든 RTOS라서 리눅스에서 커널 기본 구조를 많이 참조했다. 나중에 경력이 쌓이면서 보니 실무에서 쓰는 RTOS는 그 구조가 훨씬 간단했다. 그 경험을 바탕으로 두 번째 RTOS 책을 10년후에 쓴다.

개발 환경이나 개발 툴 관련 내용이 오래되어서 그렇지 여전히 실무에서 사용하는 대부분의 기술 내용을 책에서 찾을 수 있다. 그만큼 펌웨어 업계는 변화가 적다.

컴퓨터 아나토미

출판사 : 한울
출판년도 : 2010

삼성에 다닐 때 쓴 책이다. 나는 퇴근 후 바로 집에 가는 것을 예전이나 지금이나 좋아한다. 그래서 저녁에 책 쓸 시간이 충분하다. 그 때도 퇴근하고 집에 들어와서 조금씩 썼다. 처음에는 책 낼 생각은 없었다. 그냥 내가 공부하려고 글을 썼다. 쓴 글은 KLDP에 공개했다. 이번에도 마찬가지로 내 글을 읽은 사람이 소개해서 출판사와 연이 닿아 출판했다.

내 개인적인 생각에는 정말 훌륭한 책이고, 시간이 지나도 변함없는 이론을 설명한 책이기 때문에 아주 좋은 책이라고 생각한다. 그러나 판매량은 그다지 많지 않다.

임베디드 OS 개발 프로젝트

출판사 : 인사이트
출판년도 : 2019

시간이 오래 지나, 미국에서 쓴 책이다. 크리스마스 연휴에 할 일이 없어서 RTOS를 새로 만들었다. 그리고 그 RTOS 제작 과정을 글로 썼다. 이번에는 원고를 공개하지 않고 출판을 목적으로 썼다. TeX로 원고를 작성했다. 그러나 정작 출판사에서는 TeX 원본을 받아서 편집하는 걸 더 어려워 하더라. 다음에는 그냥 markdown으로 작성하련다.

첫 번째 책을 쓰고 펌웨어 엔지니어로 10년을 일한 후에 쓴 책이다. 그래서 책의 내용을 실무에서 필요한 감각으로 썼다. 그러다보니 오히려 RTOS 책이라기보다는 펌웨어 전반에 걸친 내용을 더 많이 설명했다. 다음에는 아예 대놓고 펌웨어 제목을 달고 책을 써볼까 하는 생각을 했다.

프로젝트

나는 노동자다. 아직은 노동으로 돈을 번다. (노동으로 돈을 벌지 않고도 잘먹고 잘 사는 것이 목표다) 내가 하는 노동은 코딩이다. 그리고 나는 코딩이 취미다. 취미라서 그렇게 열심히 코딩하진 않지만 그래도 내 여러 취미 중 하나가 코딩이다. 그 결과물은 오픈 소스로 공개해 놨다.

planck lang

프로젝트 페이지 : https://github.com/planck-lang/planck

수년 동안 1.0을 릴리즈 못 하고 있는 프로젝트다. 내 오랜 꿈 중 하나가 나만의 프로그래밍 언어를 만드는 것이다. 그래서 꾸준히 도전하고 있다. 한참 작업하다가 리셋하고 처음부터 다시 시작하는 것을 세 번정도 반복했다.

처음에는 토크나이저와 파서부터 생으로 다 코딩해서 만들었다. 그러다가 어느 시점에 한계에 닿았다. 그래서 리셋했다. 다시 시작했을 때는 토크나이저와 파서는 lex, yacc을 썼다. 한참 잘 진행하다가 구조체 설계에서 막혔다. 그리고 일 년 가까이 작업을 안하다가 다시 리셋했다. 다시 시작했을 때는 VM부터 위로 올라가는 식으로 진행하고 있다.

Gosu (고수)

프로젝트 페이지 : https://github.com/navilera/Gosu

키보드 펌웨어다. 내가 지금도 쓰고 있는 잘 동작하는 펌웨어다. 내가 만든 나빌로스를 기반 RTOS로 쓴다. 나빌로스에 키보드 HID 스펙을 구현했다.

STM32 기반으로 동작한다. 물론 나빌로스를 RTOS로 썼기 때문에 HAL 만 포팅하면 다른 MCU 기반으로 쉽게 바꿀 수 있다. 현재 구현 부분에서 STM32의 오픈 소스 BSP에서 HAL을 가져다 썼다. 이 코드를 재작성해서 STM32의 오픈 소스 의존을 제거하고 싶다.

나빌로스 (Navilos)

프로젝트 페이지 : https://github.com/navilera/Navilos

내가 의도한 이름은 나빌OS다. 그런데 보통 그냥 붙여 읽으니 나빌로스라고 부른다. 2009년 출간한 ‘도전! 임베디드 OS 만들기’와 2019년 출간한 ‘임베디드 OS 개발 프로젝트’의 기반 코드다. 매우 간단한 RTOS 구현체다. 그럼에도 실무에서 충분히 활용 가능한 RTOS다. 나는 이미 나빌로스로 키보드 펌웨어(Gosu 프로젝트)를 만들어 아무 문제없이 잘 쓰고 있다.

보다 많은 플랫폼에 포팅하고 싶다. 추가로 여러 응용 프로젝트를 진행해서 책을 한 권 더 써보고 싶기도 하다.

프로젝트 페이지 : https://github.com/navilera/NavilIME

나빌IME라고 부르거나 나빌입력기라고 부른다.

318Na 자판을 윈도우에서 쓰려고 만든 윈도우용 입력기다. 리눅스에서 319Na 자판을 쓰는 것은 libhangul을 수정하는 것 만으로 생각보다 수월하게 성공했다. 그러나 윈도우에서 쓰는 것은 입력기를 새로 만드는 수준으로 큰일이 되어 버리고 말았다.

윈도우용 IME를 만드는 방법은 자료가 너무 없다. 그래서 샘플로 공개되어 있는 소스 코드를 기반으로 해서 수정해야 한다. 그냥 수정만 해서 되는 일이 아니다. 그래서 나는 샘플 코드를 기반으로 한 줄씩 새로 작성하는 방법으로 나빌 입력기를 구현했다.

현 시점에서 나빌 입력기는 318Na 자판을 완벽하게 입력한다. 그 외에 libhangul이 지원하는 자판을 모두 입력할 수 있다. 그러나 내가 쓰지 않기 때문에 테스트를 충분히 하지 않았다.

프로젝트 페이지 : https://github.com/navilera/NavilIMEforMac

맥OS에서 318Na 자판을 쓰려고 만들었다. 오토마타까지 직접 개발했다. 윈도우나 리눅스에서 처럼 libhangul을 사용하려고 했는데 한글 오토마타가 생각보다 어렵지 않았다. 낙서 삼아 한글 오토마타 설계를 끄적거려보니 할 만 할것 같아서 외부 라이브러리 없이 한글 입력 관련 모든 코드를 직접 다 작성했다.

그 외에 390 세벌식과 두벌식도 시험삼아 오토마타를 만들어 보았다. 모두 잘 작동한다.