경험은 실력을 낳고 실력은 경험으로 이어진다. 임베디드 리눅스 개발 경험은 그 만큼 중요하다. 데이터 시트에 맞게 디바이스 드라이버 구현을 하는 작업은 누구나 할 수 있다. 초보와 고수 차이는 디바이스 드라이버를 여러 다양한 환경에서 구동할 때 생기는 문제를 해결하는 능력이다. 임베디드 리눅스 개발 도중 여러 문제를 만난다. 그럼 이 문제를 해결하기 위해서 여러 단계를 밟아야 한다.
문제는 이런 문제 해결 분석과 같은 실무 경험이 리눅스 커널 개발자끼리도 공유되고 있지 않다는 것이다. 이 이유가 뭔 지 조금 더 살펴보자.
첫 번째는 실력 있는 임베디드 리눅스 개발자들은 대부분 바쁘다. 문제 하나를 해결하면 다른 문제를 봐야 할 경우가 많다. 내 주위에 밤 낮으로 문제를 해결해야 하는 고수 개발자를 보면 측은하기 까지 하다. 주말에 여유가 있으면 고갈된 체력을 비축하기 위해 쉬어야 한다. 이렇게 바쁜 개발자들이 어떻게 자신의 노하우를 정리해서 블로그나 리눅스 커뮤니티에 정리하겠는가?
두 번째로 대부분 개발자들은 글쓰기를 싫어한다. 이게 가장 큰 이유인 것 같다. 이공계 계통 능력자들은 대부분 이런 캐릭터인 것 같다. 나도 개발하면서 개발자들과 이메일이나 메일링 리스트로 다른 개발자들이 쓴 메일을 읽으면 가끔 이해가 안 갈 때가 많다. 기승전결 없이 자신의 생각이나 의견을 토해내는 내용인 경우가 많다. 코드나 디버깅 하기 바쁘니 그러려니 할 때도 있다. 그런데 사실 바쁘지 않아도 이 계통 분들은 글 쓰길 싫어한다. 그 이유는 난 잘 모르겠다. 특히 임베디드 계통은 그 비율이 더 적은 것 같다.
세 번째로 그 수가 많은 지 모르겠지만 임베디드 개발자들이 자신의 개발 노하우를 공유하길 꺼려하는 경우다. 자신만의 영업 기밀이라 생각하는 것 같다. 리눅스 커널은 오픈 소스라 어느 회사나 리눅스 커널을 포팅해서 제품을 만들면 소스 코드를 오픈해야 한다. 하지만 문제 해결 방법을 오픈해야 하는 것은 아니다.
사실 리눅스 커널에 대한 노하우나 Q&A는 stack overflow 같은 여러 사이트에서 확인할 수 있고 코드를 열심히 분석하고 질문을 올리면 답을 받을 수 있는 공간도 있다. 문제는 이런 사이트에서 활동하려면 영어를 잘 해야 한다.
네 번째로는 한국 임베디드 리눅스 개발자들은 영어를 잘하지 못한다. 한국 임베디드 업종에 종사하는 분들을 만나면 다들 영어 때문에 스트레스를 많이 받는 걸 많이 봤다.
이런 이유로 임베디드 리눅스 개발 노하우가 공유되지 않으니 한국 임베디드 리눅스 개발자들은 회사에서 고참 개발자들 어깨 너머로 개발 노하우를 배워야 하는 처지다.
임베디드 리눅스 개발자로 실력을 인정 받으려면 많은 지식을 쌓아야 한다. 아는 것은 물론이고 실전 지식으로 개발에 써 먹을 정도로 잘 알아야 한다. ARM 아키텍처, 익셉션 원리, 어셈블리 명령어, 리눅스 커널 자료 구조, 회로도와 데이터 시트 보는 방법, 고급 C 언어 및 알고리즘 분석 그리고 Trace32, Crash-Utility, ftrace, Java Script 등등… 한도 끝도 없다.
체계적으로 셋업이 안된 인프라에서 이런 고급 지식을 익히는 개발자의 현실은 녹녹하지 않다. 정말 리눅스 커널이 오픈 소스인가 묻고 싶다.
최근 덧글