리눅스 프로그래머와 제조업
필자는 리눅스 프로그래머이기도 하지만 제품을 생산하는 제조업에 종사중이다. 따라서 재직중인 회사에 공장이 딸려있고 생산 라인도 조성이 되어 있다.
프로그래머가 제조업에 종사중이라고? 라고 말하는 분들이 있을지 모른다. 우리가 흔히 프로그래머라고 하면 “실리콘밸리” 같이 쾌적한 사무실에서 여러대의 모니터를 두고 우아하게 프로그래밍을 하는 프로그래머를 떠올릴 수 있다. 최근에 “스타트-업” 회사가 IT 업계에서도 종종 화두가 되고 있고 “네카라쿠배”로 대표되는 국내 IT 대기업들은 죄다 “IT 서비스” 기업이기 때문에 제조업과 프로그래머는 약간 거리가 있어 보이기도 하다.
하지만 의외로 프로그래머와 제조업은 뗄레야 뗄수 없는 사이이다. 현재의 제조업에서 프로그래머는 매우 중요한 역할을 하고 있다. 우리나라의 대표적인 기업인 “삼성전자”의 경우에도 제조업에 속하며 대표상품인 반도체나 스마트폰은 소프트웨어가 꼭 필요한 분야이다. 당연히 많은 “프로그래머”가 삼성전자에서 프로그래밍을 하고 있다.
프로그래머 인력이 부족하기 때문에 심지어는 해외 인력을 들여오기도 한다. 스마트폰은 안드로이드 OS가 탑재 되기 때문에 “프로그래머”의 역할은 매우 절대적이라고 볼 수 있다. 이 외에도 우리나라 뿐만 아니라 전세계적으로 제조업에 많은 프로그래머들이 종사하는 중이다.
그렇다면 “리눅스” 프로그래머는 제조업과 어떤 관계가 있을까? 필자는 리눅스 프로그래머이고 제조업에 종사한다면, 분명 제품을 만드는데 직/간접적으로 리눅스가 탑재 된다는 의미가 될 것이다. 이번 시간에는 리눅스와 제조업에 관해서 한번 정리를 해보기로 한다.
리눅스는 어떤 제조업에서 주로 쓰일까?
우리나라는 “제조업”으로 먹고 사는 주요 국가중 하나이다. 세계 경제 10 위권의 경제대국이자 자동차, 조선, 중장비, 반도체 등이 주요 수출품이고 이들 제조업은 이미 세계적인 수준에 올라와 있다.
일본이나 독일같은 주요 선진국이자 제조업이 강한 국가들도 우리나라와 비슷하게 자동차, 조선, 중장비 등이 주요 산업인데, 이미 소프트웨어 산업은 제조업이 발달한 국가들의 주요 산업에도 깊숙히 들어와 있는 상태다.
그렇다면 리눅스로 범위를 좁혔을때 어떤 제조업에서 리눅스가 탑재되고 사용될까? 리눅스 프로그래머에 대한 내용을 정리한 위키글이 있으니 일단 한번 참고해볼것.
위에 글을 보면 이미 리눅스는 IT 서비스업 뿐만 아니라 제조업 분야에도 많이 사용되고 있음을 확인할 수 있다. 필자가 개발했던 제품들을 보면 네트워크 라우터(유무선 공유기)와 네트워크 장비쪽을 개발했었는데, 이 제품들에도 리눅스가 탑재되어 있다.
리눅스는 “네트워크” 쪽 장비나 장치에는 많이 활용되고 있다. 기본적으로 커널에 탑재되어 있는 NAT 기술 덕분에 우리가 손쉽게 가정에서 “유무선 공유기”를 저렴한 가격으로 사용하고 있는 것이다. NAT 기술은 한정되어 있는 IPv4 의 IP 자원을 매우 효율적으로 활용할 수 있게 큰 기여를 한 셈이다.
이 외에도 네트워크 관련 기술에는 “리눅스”를 사용하면 더 효율적이고 저렴한 비용으로 사용이 가능하다. 따라서 네트워크 장치/장비 분야에는 거의 리눅스가 필수적으로 탑재되어 있다고 보면 된다.
네트워크/통신 장비에 많이 탑재되는 리눅스이지만, 다른 분야에서도 많이 활용이 되고 있다. 차량용 멀티미디어 시스템이나 네비게이션, TV 셋탑박스, DVR 의 경우에 리눅스가 탑재되어 출시 되고 있다. 그 외에 로봇, 가전제품, 계측 장비 등등에 리눅스는 많이 활용이 되고 있다. 특히 스마트폰 혁명의 중심에는 리눅스가 있다고 해도 과언이 아니다. 그 이유는 “안드로이드”에 리눅스 커널이 탑재되어 있기 때문이다.
이걸 보면 “리눅스”는 우리 일상 생활에 깊숙히 들어와 있다고 보면 된다. PC에 탑재되는 대부분의 운영체제가 Windows이고 Windows는 우리 생활에 친숙하지만, 늘 손에 지니고 다니는 스마트폰은 “리눅스”가 탑재되어 있다는게 매우 흥미롭다. 하지만 일반 사람들은 안드로이드 스마트폰에 “리눅스 커널”이 탑재되어 있다는 사실을 모르는 사람이 많다.
이처럼 리눅스는 우리의 생각보다 훨씬 더 생활 깊숙히 들어와 있고 제조업에도 많이 쓰이는 운영체제이다. 따라서 리눅스 프로그래머들도 생각보다 많이 “제조업”에 진출해 있다.
오픈소스의 힘과 리눅스
리눅스가 제조업은 물론이고 산업 전반에 걸쳐서 활용이 되고 있다는 사실은 명백하다. 그리고 리눅스는 끊임없이 업데이트 되고 있고 발전하고 있다.
여기서 궁금해지는게 있다. 그렇다면 “리눅스”는 어떻게 이렇게 많이 활용되는 인기있는 OS가 되었을까?
1991년 핀란드의 한 프로그래머인 리누스 토발즈에 의해 창시된 리눅스는 처음부터 소프트웨어 산업의 방향과 전혀 다른 방식으로 개발되고 배포되었다.
1990년대 당시만 해도 소프트웨어 개발사가 수익을 올리는 방법은 “직접 판매” 였다. 열심히 개발하여 완성도 높은 소프트웨어를 사용자들에게 돈을 받고 판매하는 방식이었다. 하지만 이 방식은 부작용이 발생하였다. 그 이유는 “불법복제”가 만연했기 때문이다.
프로그래머들이 불법 복제를 막기 위해 아무리 보안에 신경을 쓰고 판매 방법을 개선해도 당시에는 불법 복제를 막을 방법이 딱히 없었다. 누군가는 “크랙”을 통해 상용으로 판매하는 소프트웨어를 널리 퍼트리고 불법 복제를 감행했다.
당연히 소프트웨어 개발사들의 수익은 급격히 감소하고 나빠지기 시작한다. 열정을 가지고 창업한 소프트웨어 회사들의 경영이 어려워지고 사라졌다. 독과점 위치에 있었던 유일한 대형 소프트웨어 회사인 “마이크로소프트”만 Windows 판매를 통해 살아남은 케이스라고 볼 수 있다.
이런 분위기에서 리눅스의 창시자 토발즈는 어이없게도 자신이 개발한 리눅스의 소스 코드를 공개해 버리는 결단을 내린다. “오픈 소스”의 시작이다.
토발즈의 리눅스 소스 코드는 많은 프로그래머들에게 퍼져나갔고 유닉스와 비슷한 컨셉의 리눅스는 급속도로 발전하기 시작했다. 당연히 누구나 무료로 소스를 볼수 있는 “리눅스”는 프로그래머들에게 인기있는 OS가 되기에 충분했다. 1991년 리눅스가 창시된 이래 30여년동안 리눅스는 더욱더 발전하고 프로그래머들이나 해커들에게 매우 사랑받는 OS가 되었다.
“오픈소스”의 힘은 마이크로소프트의 Windows와 더불어 가장 인기있는 OS가 리눅스가 되기에 매우 큰 역할을 한 셈이다.
제조업 vs IT 서비스업, 그리고 리눅스
Windows와 더불어 OS의 양대산맥으로 떠오른 리눅스. 리눅스는 일반 사용자들 뿐만 아니라, 파워 유저, 해커, 수많은 프로그래머들의 개발 도구로 많이 활용되고 있다. 또한 전세계의 다양한 산업에서 리눅스가 쓰이고 있다.
리눅스는 수많은 IT 서비스 회사들의 “서버”로 많이 쓰인다. 리눅스가 자체가 네트워크 장비나 장치 구성에 유리하기 때문이다. 또한 무료로 사용할 수 있는 수많은 개발도구는 리눅스를 서버로 사용하기에 꽤 매력적이다.
따라서 리눅스는 IT 산업에서 없어서는 안되는 OS로 평가받고 있다. 일단은 “오픈소스”이고 무료이기 때문에 기업 입장에서 많은 비용을 절감할 수 있다.
리눅스 배포판을 기반으로 매출을 올리는 기업도 있다. 대표적인 기업이 “레드햇” 이다. 레드햇은 일반 유저들에게 무료로 제공하는 “레드햇 리눅스”로 유명한 회사이다. 실제로는 기업용으로 제공하는 “레드햇 리눅스 엔터프라이즈”로 큰 성공을 거둔 회사다. 레드햇 엔터프라이즈는 유료 소프트웨어이고 이를 판매한 기업에서 유상으로 유지보수나 기술지원으로 수익을 올리고 있다. 이는 리눅스로도 충분히 수익을 올릴 수 있고 성공을 거둘 수 있다는 아주 좋은 사례다.
이와 같이 리눅스는 오픈소스로 제공되지만, 그에 따른 기술지원이나 유지보수는 유료로 하여 수익을 올리는게 가능하다. 따라서 리눅스는 오픈소스의 훌륭한 수익 모델을 대표하게 되었다. 최근에는 많은 S/W 정책이 “오픈소스”로 운영이 되고 있다.
이런 이점으로 리눅스는 IT 서비스업 뿐만 아니라 많은 제조업에서도 서서히 활용되기 시작했다. 네트워크 서버 외에도 네트워크 기능이 필요한 수많은 장치, 장비들에게 포팅되어 개발 및 보급되고 있다. 가장 대표적인 장치는 “안드로이드 폰” 이다. 안드로이드 폰은 현재에도 가장 많이 보급된 스마트폰이며, 안드로이드에는 “리눅스 커널”이 탑재가 되어 있다. 물론 안드로이드에 사용된 리눅스 커널은 “오픈소스” 형태로 공개가 되어 있다.
안드로이드 폰 외에도 리눅스는 우리 생활 곳곳에 녹아들어가 있다. 가전, 테블릿 PC, IP 공유기, 멀티미디어 기기, 네비게이션, 블랙박스 등등… 리눅스는 제조업에서도 현재까지 활발히 활용되어 사용되고 있다. 뿐만 아니라 각종 산업용 장비에도 리눅스는 포팅되어 사용중이다.
이렇게 산업 전반적으로 리눅스가 활용되다 보니 리눅스 프로그래머들도 IT 서비스업종 뿐만 아니라 제조업 등 다양한 분야의 업종에 진출해 있다. 필자의 경우에도 IT 서비스 업이 아닌 생산 공장이 있는 제조업 회사에 재직중이다. ARM 기반의 프로세서에서 동작하는 “임베디드 리눅스”를 다루다 보면 자연스레 제조업에 종사할 기회가 많아진다.
인텔 프로세서 기반의 PC나 서버에 리눅스를 동작하는 것과 다르게 ARM, MIPS CPU 등에서 동작하는 리눅스는 상대적으로 저전력, 소형 시스템이기 때문에 사이즈를 줄인 “임베디드 리눅스” 가 탑재되어 동작한다. 임베디드 리눅스는 개발하는 유저의 목적에 따라 조금씩 다른 특징을 가지고 있고 제조업에서 많이 활용되는 점도 있다.
대한민국에서도 “삼성전자”를 비롯해 많은 전자, 전기, 전장 분야에서 리눅스를 활용해 개발을 하고 있다. 리눅스는 네트워크 기능이 탑재되어 있기 때문에 전자제품이라면 당연히 들어가야 있을 “네트워크” 장치 개발에 적합하다. 그런데… 많은 제조업 회사들이 “리눅스”를 탑재하다 보니 약간의 문제가 발생하는 듯 하다.
대한민국 특유의 제조업 문화
대한민국은 세계적으로도 “제조업”이 강한 국가 중 하나이다. 제조업 강국인 독일, 일본 등과 같이 현대 산업의 꽃인 “자동차”를 제조할 수 있는 국가이고, 조선, 중공업, 메모리 반도체 분야에서는 선두권을 달리고 있다.
다른 제조 선진국들에 비해 산업화는 늦은 편이지만 1970년대부터 제조업을 중심으로 경제가 성장하였기 때문에 삼성전자, LG 전자와 같은 전자 대기업은 그 역사가 꽤 오래된 셈이다. 잘 알다시피 “삼성전자”의 경우는 미국 인텔과 비등한 매출 규모를 자랑하고 있다. 세계적인 기업이라고 볼 수 있다.
삼성전자의 경우는 메모리 반도체 분야에서는 세계적 기업이고 안드로이드가 탑재된 스마트폰도 전세계에서 가장 많이 팔리고 있다. 여기서 주목할 점은 “안드로이드 폰”이다. 안드로이드 폰이 가장 많이 팔린다는 것은 “리눅스 커널”이 탑재된 제품이 전세계적으로 많이 팔린다는 뜻이 된다.
그렇다면 삼성전자의 “리눅스”쪽 S/W 수준은 어떨까? 삼성전자는 실제로도 리눅스 커널 개발에 많이 기여를 하고 있는 편이다. 하지만 전세계 기업들의 커널 개발 기여도 순위를 보면 “8위”에 랭크되어 있다고 한다. 스마트폰을 가장 많이 판매하는 기업 치고는 기여도는 상대적으로 낮다고 볼 수 있다. 그럼에도 8위라는 수치는 결코 무시할 만한 수치는 아니다. 삼성전자는 나름 리눅스 분야에 신경을 꽤 쓰고 있다는 반증이기 때문이다.
하지만 그 외에 다른 전자 대기업이나 IT 서비스 기업들의 기여도를 보면 처참해진다. 최근에 스마트폰 사업 철수를 결정한 LG 전자는 뒤늦게 스마트폰 사업에 뛰어들고, 뒷북을 쳤다는 평가를 받고 있다. 대세인 스마트폰에 집중하지 않고 기존 폰들의 성공에 취한 결과다. 당연히 리눅스 쪽 기여도도 삼성전자에 비할 바가 아니다.
국내 거대 전자 대기업인 LG전자가 이럴진데, 국내 다른 기업들은 어떨까? 리눅스 혹은 오픈소스 기여도는 처참한 수준이라고 봐야 한다. 많이 사용하는 오픈소스들은 대부분 해외 프로그래머들이나 기업이 기여한 것이고 국내 기업이나 프로그래머들이 기여한 오픈소스 숫자는 상대적으로 매우 빈약한 편이다.
필자는 개발 경력 대부분을 “제조업” 회사에서 보냈다. 잠시 동안 네트워크 솔루션 회사에서 재직한거 외에는 “공장”이나 “생산”을 하는 기업에서 개발을 한 것이다. 물론 제조 대기업에서 개발은 한적이 없어서 대기업의 문화를 알기는 어렵지만 협력이나 대기업 출신의 임원들과 같이 일해본 경험이 있어서 간접 경험은 해본 셈이다.
최근에 회사를 이직을 했고 몇개월 되지 않았다. 그런데 또다시 여기서 느낀 점이 있다. “제조업의 위기” 라고….
왜? 이렇게 생각하게 되었을까? 단지 나만의 생각일까?
리눅스는 “오픈소스” 이기도 하지만 꽤나 복잡한 “커널”이 탑재된 OS이다. 리눅스를 기반으로 개발한 시스템은 덩치가 큰 리눅스 커널의 위상과 같이 꽤나 복잡하고 난이도가 있으며 개발하기가 번거롭다.
x86 기반의 시스템은 리눅스 배포판을 설치하여 리눅스를 구성하면 되지만, 제조업 회사에서 개발한 리눅스는 ARM 기반의 “임베디드 리눅스”를 탑재한다. 일반적으로 ARM 기반의 CPU에 리눅스를 탑재하려면 ARM CPU의 제조사에서 제공한 BSP(Board Support Package)를 이용하여 개발한다.
일반 제조사에서 ARM 기반의 CPU에 리눅스를 탑재하기란 사실 불가능에 가깝다. 그 이유는 ARM 기반이라고 해도 제조사마다 아키텍처가 조금씩 다르며 시스템을 개발하는 제조사는 칩셋 제조사 만큼이나 CPU의 아키텍처를 알기가 어렵다. 그리고 일반 리눅스 프로그래머가 CPU 아키텍처를 파악하고 리눅스를 포팅하는 것도 매우 어려운 작업에 속한다.
그래서 CPU를 제조하는 제조사는 BSP를 개발하는 전문 인력을 따로 두어 BSP를 개발한다. 이들은 CPU의 아키텍처를 분석하고 리눅스가 안정적으로 동작하게끔 포팅하는 작업을 진행하여 충분히 테스트를 거친후에 BSP 공식 릴리즈 버전을 제공한다. 시스템 제조사는 이들 CPU를 사용하려면 당연히 CPU 제조사의 BSP를 가져다 쓰는게 일반적이다. 시스템 제조사의 리눅스 프로그래머들은 BSP를 직접 개발하지 않고 제공받은 BSP를 활용하여 시스템을 개발하는게 일반적이다.
BSP를 가지고 시스템을 개발하다 보면 여러가지 이슈에 직면하게 된다. BSP 가이드 문서에 없는 기능 수정 및 추가해야 될 일도 있고 H/W 장치들을 추가 하는 작업이 필요할 수 있다. H/W 장치들을 추가하려면 당연히 Device Driver 를 수정해야 하는 일이 뒤따른다.
하지만 이런 일들이 생각보다 만만치 않다. H/W 장치를 추가하려면 그 장치에 맞는 Driver를 Load 해야 하는데 커널 버전에 따라서 적절한 Driver 가 제공이 되지 않거나 수정해야 될 일이 발생할 수 있기 때문이다. 물론 수정은 가능하지만 문제는 H/W 장치에 대한 정보가 부족하다 보니 리눅스 프로그래머들이 수정하는데 어려움을 겪는다.
이 외에도 잘 돌던 시스템이 갑자기 멈추거나 죽는 등의 문제가 발생하거나, 커널을 수정해야 될 일이 발생하기도 한다. 이때에는 프로그래머들이 분석하고 비슷한 사례를 찾거나 맨땅에 해딩하는 수 밖에 없는데, 회사들은 이런 프로그래머들의 상황을 잘 모르는 경우가 많다.
리눅스를 기반으로 시스템을 개발하다 보면 별의별 문제들이 다 튀어 나온다. 개발 환경을 꾸미는데에도 시간이 걸리며, 관련 지식을 파악하는데에도 시간이 걸린다. 편리한 IDE 같은 개발 도구가 없기 때문에 다소 번거로운 측면도 있다. GDB 같은 디버깅 도구들도 있지만 ARM 기반으로 한 임베디드 리눅스의 경우에는 H/W 적인 디버깅 도구들이 필요하기도 한다.
그런데…. 소위 “제조업”으로 분류된 회사들은 특히 이런 프로그래머들의 상황을 이해하지 못한다. 우리나라 기업들의 특유의 “빨리빨리” 문화는 프로그래머들의 개발 일정에 매우 악영향을 미치게 된다.
특히 대한민국 특유의 조직문화인 “군대문화” 혹은 “꼰대문화”는 제조업으로 분류된 회사들에게서 더 많이 찾아볼 수 있는데, 소위 “까라면 까”, “안되는게 어딨어?” 등의 마인드로 프로그래머들에게 급박한 일정과 빠른 결과물을 요구한다. 기획 – 설계 – 개발 – 테스트 등의 프로세스는 그리 중요하지 않다.
프로젝트의 시작부터 리눅스와 시스템에 대한 충분한 사전 검토 없이 최대한 저렴하고 최대한 일정을 당기는게 중요하다 보니 프로그래머들의 의견이 시작부터 철저히 무시되는게 빈번하다. 그러다가 한창 개발이 진행되고 나서 여러가지 이슈나 악재가 터지는 것은 불보듯 뻔하지만 그 책임을 프로그래머에게도 돌리는 경우도 있다.
이렇듯 개발 프로세스에 대한 충분히 고민과 검토가 없이 마구잡이 혹은 중구난방식으로 프로그래머만 채용하면 개발이 이루어질거라는 착각을 하는 회사들이 생각보다 많다. 특히 리눅스라는 꽤 덩치가 큰 OS를 탑재하는데 있어서 개발중에 발생하는 이슈에 대해 단순하게 생각하다 보니 일정을 당기거나 결과물을 얻기 위해 특유의 “군대식” 혹은 “쪼는” 방식의 프로세스가 리눅스 프로그래머들에게도 적용된다.
이런 상황으로 인해 십수년간 리눅스 프로그래머로 생활하면서 이런 부분에 질려서 퇴사하는 프로그래머들을 많이 봤다. 또한 필자도 마찬가지로 이런 방식이 마음에 들지 않아서 퇴사를 결심한 적이 꽤 많았다.
현재 재직중인 회사는 나름 규모가 있고 해외에서도 유명한 회사이지만, 역시나 그 대한민국 특유의 제조업 문화가 여실히 존재한다. ARM 기반의 리눅스가 탑재된 시스템을 개발하는데 문제는 핵심적인 역할을 하는 리눅스 프로그래머들의 입/퇴사가 짧은 시간내에 반복된다는 점이다.
그럼에도 불구하고 회사는 왜 변화하지 않는 것일까? 또다시 프로그래머를 채용하여 돌리면 되는 것일까? 역시나 이번에 온 회사도 전에 겪었던 회사들과 크게 다르지 않는 모습을 보여주고 있다.
다른 분야의 소프트웨어도 마찬가지이겠지만 기획 부터 개발 완료까지 충분한 일정과 적절한 리소스 투입은 매우 중요하다. 완벽한 프로세스는 없다. 그러나 과거 대한민국의 제조업 문화인 “무작정 시간과 인력만 투입하면 성공하는” 시대는 이미 지났다고 봐야 한다.
소프트웨어 분야는 무작정 시간만 투입하면 결과물이 나오는 산업이 아니다. S/W를 개발할 수 있는 적절한 인재와 충분한 검토 및 시간이 필요하다. 프로그래머는 그냥 마구잡이로 투입해서 금방 결과물을 내놓는 “요술 방망이”가 절대 될 수 없다.
하지만 현재 대한민국의 제조업에 속한 회사들은 과거의 방식을 여전히 답습하고 있는 듯 하다. 무작정 시간과 인력만 투입하면 결과물이 나올거라고 착각을 한다. 물론 단기적인 성과는 분명 있겠지만 프로그래머들은 그 회사에 오래 머물지 않을 것이다.
현재 재직중인 회사도 이런 상황에 처해 있는 것을 보고 현 대한민국의 제조업에 대해 여러가지 생각을 하게 되었다. 얼마전까지 메이저 자동차 제조사 출신 기업에서 일을 했는데, 그들도 역시나 그 생각은 크게 다르지 않았다.
현 대한민국의 제조업은 기로에 서있는지 모른다. 점점 IT 기술이 제조업과 결합이 되고 있고 앞으로도 제조업은 소프트웨어 기술을 뗄레야 뗄수 없다. 그러나 대한민국의 제조업이 현 상황을 직시하지 못하고 과거의 영광에 취해있다면 제조업의 미래는 매우 암울할 것이다.