이번에는 임베디드 혹은 시스템 리눅스 개발과 관련된 이야기를 해보려고 해요.
저는 개발자 뿐만 아니라 취준생 분들과 교류를 하면서 여러 가지 정보를 공유받고 공유하기도 하는데요. 가끔 황당할 때가 있어요. 어! 어떻게 이런 생각을 할 수가 있지? 이런 정보를 어떻게 들었지? 그럼 어떤 황당한 소리를 들었냐고요? 이제부터 이야기를 해볼께요.
'리눅스 디바이스 드라이버'는 배울 필요가 없다
가장 먼저 들었던 소리는 '리눅스 디바이스 드라이버'는 배울 필요가 없다는 의견을 주신 분들이 있었어요. 앱 개발자 분들은 이런 말을 할 수도 있을 것 같아요. 그런데 임베디드나 리눅스 시스템 분야 개발을 지망하시는 분들 입에서 이런 말이 나오더라고요. 그래서 제가 물어봤죠. 디바이스 드라이버를 배우지 않아도 되는 이유가 뭐에요? 그런데 뭐라고 대답하는 줄 아시나요? SoC 칩 업체에서 안정된 리눅스 드라이버를 제공하기 때문이래요. 이 이야기를 듣고 저도 모르게 나오는 웃음을 참기 어려웠어요. 이게 뭔 소리지?
다시 한번 강조하지만 이런 말은 한 사람이 임베디드 리눅스 개발자 지망생이었어요. 그래서 이 친구에게 다시 한번 물어봤어요. 이게 니 생각이냐? 그랬더니 자신이 다녔던 IT 학원 강사가 이런 말을 했다는 거였어요. 취준생들이 IT 강사들이 하는 말을 그대로 믿는다는 게 좀 안타까웠어요.
그래서 제가 그 친구에게 임베디드 리눅스 개발자가 리눅스 디바이스 드라이버를 꼭 배워야 하는 이유를 설명해 줬어요. 그 이야기를 여기서 하면요.
먼저 제품을 구성할 때 부품이 바뀔 수가 있어요. 예를 들어 A란 센서 부품에서 B라는 센서 부품으로 변경됐어요. 그럼 B라는 센서의 드라이버를 제품에 맞게 수정해야 해요.
이 때 SoC 칩 업체 개발자에게 B란 센서의 드라이버를 제작해 달라고 하면, 소스를 줄까요? 이런 요청을 하면 아예 들은 척도 하지 않을껄요?
두 번째로는 SoC 칩 업체에서 전달하는 드라이버 자체도 100% 안정성이 보장된다고는 볼도 수 없고요. 이건 좀 민간한 이야기기도 한데요. 생각지도 못한 버그가 숨어 있을 수 있어요. 그런데 제품을 개발하는 도중에 버그가 나오면 SoC 칩 업체 개발자가 그 버그를 잡아 줄까요? 물론 개발하려는 SoC 칩에 대한 기술 지원 비용을 지불한다면 가능하겠죠.
그런데 생각보다 SoC 칩에 대한 기술 지원 비용을 내지 않고 개발하는 프로젝트가 은근히 많아요. 이런 상황에서는 제품 개발자가 SoC 칩 업체에서 전달된 드라이버 코드를 수정해야 되죠.
또한 디바이스 드라이버를 모르면 부팅 시간이라던가 디바이스의 실행 시간을 최적화하는 작업을 진행할 수 없어요. 리눅스 시스템 프로그래밍으로 이런 작업을 할 수 있다고 주장하시는 분도 있는데요. 사실 시스템 프로그래밍은 직접 하드웨어를 콘트롤 할 수 없으므로 한계가 있어요.
스케줄러 코드를 수정할 필요가 없으니 리눅스 커널은 배울 필요가 없다
이어서 제가 들었던 황당한 이야기를 해볼께요. 리눅스 시스템 개발 업계에서 이런 소리를 하시는 분들이 있는데요. 스케줄러 코드를 수정할 필요가 없으니 리눅스 커널은 배울 필요가 없다는 소리를 해요. 작년까지만 해도 2000년대 초반에 임베디드 개발을 시작했다가 리눅스에 적응하지 못했던 퇴물 개발자들로부터 이런 소리를 들었는데요. 요즘에는 주니어 개발자들의 입에서 이런 말을 들을 때 '약간 어이가 없다'는 생각이 좀 들었어요. 참 꼰대는 나이를 초월해서 존재한다는 생각도 드는데요.
'리눅스 커널의 스케줄러 소스 코드를 수정할 필요가 없다' 맞는 소리죠. 다른 해야 할 일이 얼마나 많은데요. 이런 말을 하면서 차라리 리눅스 커널에서 실전 개발에 도움이 될만한 내용을 잘 배우자라고 주장하면 수긍할꺼에요. 저도 비슷한 생각이거든요. 리눅스 커널의 내용은 너무 방대해서 먼저 배우면 좋은 내용부터 배우자란 말에 동의해요. 그런데 리눅스 커널은 배울 필요가 없다라는 주장에는 전혀 동의할 수가 없어요.
리눅스가 어떻게 돌아가는지 시스템 개발자 수준으로 알려면 리눅스 커널의 기본 동작 원리는 알아야 해요. 이걸 모르고 알고는 엄청난 차이에요. 또한 리눅스 드라이버나 리눅스 시스템 프로그램으로 하드웨어를 제어해도, 이런 프로그램의 동작 원리를 깊게 파고 들어가면 만나는게 리눅스 커널이거든요. 그리고 리눅스 디바이스 드라이버는 리눅스 커널에서 제공하는 API로 구성돼 있어요. 그러니 리눅스 커널을 모르면 리눅스 디바이스 드라이버 자체를 제대로 개발할 수가 없죠.
그렇다면 리눅스 디바이스 드라이버를 배울 필요가 없다. 리눅스 커널을 배울 필요가 없다는 소리를 하는 이유는 뭘까요?
이런 소리를 IT 강사들이 한다면, 리눅스 커널 드라이버가 리눅스 커널을 제대로 가르칠 능력이 안되기 때문일 꺼에요. 학생들이 리눅스 커널에 대해 질문을 하면 '그거 SoC 칩 업체에서 전달하는 거니 잘 몰라도 돼'라고 대답하는 거죠.
실제 현업에서는 리눅스 디바이스 드라이버를 배울 필요가 없다는 소리보다 리눅스 커널을 제대로 배울 필요가 없다는 소리를 더 자주 듣는데요. 개발자보다 관리자 즉 매니저들이 이런 말을 더 자주 할 가능성이 높아요. 저도 그랬고요. 이렇게 말하는 가장 큰 이유는 조금은 극단적인데요. 개발자를 오로지 비용 관점으로 관리하기 때문이에요. 회사에서 100원을 투자하면 120원만큼 개발자가 일을 하기 원하는 경우가 있거든요. 그런데 개발자가 리눅스 커널을 배우는데 시간을 투자하면 회사 입장에서는 손해라고 생각하는 거에요. 왜냐면 리눅스 커널은 며칠 배운다고 바로 티가 나지 않거든요. 뭔가 개발자의 기초 체력을 키운다란 느낌이에요.
이렇게 제가 대본까지 써가면서 이런 콘텐츠를 만든 이유는, 취준생들이 왜곡된 정보를 듣고 잘못된 방향으로 커리어를 선택할 수 있이 때문이에요.
이렇게 제가 이런 글을 쓴 이유는, 취준생들이 왜곡된 정보를 듣고 잘못된 방향으로 커리어를 선택할 수 있기 때문이에요. 이런 왜곡된 정보를 참고해서 리눅스 디바이스 드라이버나 리눅스 커널에 대해 아무런 공부를 하지 않은 체, 면접을 볼 수도 있거든요. 운이 좋게 면접에 통과 하면 좋겠지만 면접에서 리눅스 디바이스 드라이버나 커널에 대해 조금이라도 배운 경쟁자가 있다면 바로 탈락하겠죠.
SW 업계에서 배울 필요가 없는 지식은 없고 우선순위만 있을 뿐이다.
또한 IT 개발자가 배울 필요가 없는 지식은 없는 것 같아요. 리눅스 시스템 개발자라도 해도 파이썬으로 애플리케이션을 코딩하는 것 배울 필요가 없는 건 아니에요. 시간이 있으면 배우면 좋지만, 우선 순위라는 게 있잖아요. 뭐 arm 프로세서나 하드웨어와 같이 더 중요하게 익혀야 하는 테마가 있잖아요.
https://youtu.be/ESq8GJ3bCz8