작도닷넷 블로그
작도닷넷 블로그

컴퓨터

프로그래머와 사용자의 입장에서, 윈도우즈와 리눅스의 장단점

06/05/02 18:57(년/월/일 시:분)

운영체제 실습 - WIN32 - CreateProcess() 중에서

BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);

윈도우가 강력합니다. 정말 좋습니다. 그런데 너무 복잡해요.

여러분이 콘솔 프로그래밍 해보면 아시겠지만, 내가 가지고 있는 표준 입출력 3개를 전달하기 위해 별 짓 다해야 되는 걸 보면 참 그렇죠. 리눅스에서는 기본적으로 0,1,2번 약속해서 쓰는걸, 윈도우에서는 그거 하나 전달하려고 핸들 막 복사해주고 닫았다 열었다 해주는 걸 보면 답답한데요. 그래도 강력하대니까.

LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,

그리고 여기 시큐리티 옵션 있죠? 윈도우가 C2 등급을 받았습니다. 오렌지 북이라는 미 국방성이 만든 가이드라인이 있어요. 리눅스보다 높은 보안등급을 받았죠.

BOOL bInheritHandles,
DWORD dwCreationFlags,

보시면 아시겠지만, 프로세스가 자기가 가지고 있는 리소스를 자기 자식에게 어떻게 상속시킬건지, 누가 억세스할 건지 명확히 줄 수 있죠.

대신에 쓰는 사람 입장에서는 어때요? 보안은 언제나 Trade-off죠. 편리하려면 보안 다 없애면 되요. 핸들 안 만들고 PID값 하나 갖고 쓰면 되잖아. 하지만 PID값은 별도로 있고 내가 쓸수 있는지를 GetHandle해서 ID를 가지고 핸들값을 얻어올 수 있는지 검사하면 더 안전한거죠.

이런 것들이 있기 때문에 윈도우가 좀 더 복잡해진 것 같아요. 어쨌든 복잡해진건 프로그래머의 몫이고, 쓰는 사람의 입장에서는 더 편하니까요. 사용자는 반대죠. 리눅스 쓰면서 야 뭐가 이렇게 불편해? 이렇게 얘기하죠. 그런데 프로그래머의 입장에서는 야 이거 프로그램하기 진짜 편한데. 이렇게 얘기하죠. 그런 차이가 있는 것 같아요.

프로그래머들은 좀 하다보면 리눅스가 참 좋습니다. 소스 공짜로 얻을 수 있는 거 많죠, 프로그래밍하는거 심플하죠. 그런데 MFC부터 시작해서 WIN32까지 욕을 태바가지로 먹으면서도 지금 계속 건재한건, 유저가 쓰기 편하기 때문이죠.

여러분은 어려운 길을 가셔야 합니다. 윈도우 망하겠어요? MS사가 쉽사리 망할 것 같지는 않죠. 좀 복잡하더라도 쓰셔야 하는 건 현실입니다. 대신 WIN32 같은 복잡한거 하면 돈은 많이 받겠죠. 여러분이 정말 고급 프로그래머가 되려면 윈도우를 열심히 하세요.

그런데 단, 앞으로 틈새시장이 많이 열리는 것 같아요. 리눅스 쪽 보시면, 삼성에서 리눅스 개발자들을 많이 데려가죠. 일반 개발자가 아니라 리눅스 밑에 하부에 있는 커널이라던지 OS까지 밑단까지 내려갈 수 있는 분들을 많이 데려가는데요. 그러니까 여러분이 자기 나갈 곳을 잘 봐서 프로그램을 하시면 될 것 같애요. 윈도우 쪽도 나가서 쓸모가 있겠습니다만은, 리눅스도 확실하게 해두면 취업하는데는 문제가 없을 것 같아요.

작은 장치들, 임베디드쪽 시스템에서는 리눅스가 굉장히 시장이 커지고 있죠. 서버 쪽도 어느 정도 윈도우를 따라잡는다고 하지만, 내다보면 윈도우보다 강한 파트는 임베디드 쪽이라고 얘기하죠.

서버 쪽은 솔직히 말해서 리눅스는 다룰 줄 아는 전문가가 드문 편이에요. 자리도 좀 없고. 물론 많이 쓰고는 있지만 관리적 측면에서 윈도우를 많이 택하고 있죠.

그래서 앞으로 임베디드 쪽으로 가실 분들은 리눅스를 많이 보시고, 일반 사용자를 대상으로 하는, 하드웨어와 별개인 쪽을 하실 분들은 윈도우를 열심히 하셔야겠죠.

- 수업 중에서.

http://xacdo.net/tt/rserver.php?mode=tb&sl=260

  • CN 06/05/02 22:36  덧글 수정/삭제
    1. 리눅스 보다 높은 등급을 받았다는 말은 사실이 아닙니다. 상용 리눅스 배포판들이 orange book을 인증 받지 않았기 때문입니다.

    구식 리눅스들이 C1 인증을 받았던 적이 있었고 과거 윈도우즈 NT 4.0의 경우 C1이었습니다. 모든 "설정"에서 C2를 만족하지 못하였기 때문입니다. 지금은 C1 인증 자체가 폐기되었습니다. 사실상 의미가 없기 때문입니다. 대부분의 사람들은 리눅스가 C2에 있을 것으로 믿고 있습니다.

    최근에는 미정부기관인 NSA가 중심이 되어 SELINUX 프로젝트를 진행하고 있고 최신 리눅스 배포판들은 이를 수용하고 있습니다. (RedHat Enterprise Linux, Fedora, CentOS 등의 최신 버전에서 사용할 수 있습니다.) 이들은 특정 데몬이 파손되었을 때도 데몬과 직접적으로 연관된 디렉토리외의 디렉토리에 접근이 불가능한 보다 진보된 보안 모델을 가지고 있습니다.

    SE LINUX 등의 특성에 힘입어 혹자는 (SGI 등의 기업) 들은 이미 리눅스는 B1의 수준에 이르렀다고 말하는 사람도 있습니다. 하지만 B1은 흔히 "당신 상상 이상의 수준"이라고 언급되기 때문에 여전히 멀었다고 말하는 사람들도 있습니다.

    현재 호사가들의 입에서 B1에 진입하느냐 마느냐에 대해 이야기가 나오는 리눅스의 보안 모델이 윈도우즈와 비교될 수 없다고 보여집니다.

    2. Win32 API는 호환성 유지를 위해서 불필요한 부분들이 많은 것을 제외하면 매우 잘 설계되었다고 생각합니다. 다만 "구현"이 이상한 것들이 종종 있습니다. 그렇기 때문에 MFC 처럼 막무가내로 욕하기는 곤란하다고 생각합니다.

    3. 윈도우즈의 프로세스 관련 부분은 MS가 할 말이 없다고 생각합니다. VMS를 만든 데이비드 커틀러가 윈도우즈 NT를 만들었는데 윈도우즈 NT는 VMS와 매우 흡사한 장단점을 가지고 있습니다. 특히 프로세스 생성이 형편없다는 점은 VMS에서 상속받은 것같은 느낌까지 듭니다.

    4. 저도 최근에 리눅스는 로우 레벨로 파고 윈도우즈는 하이 레벨쪽을 파야하는 것이 아닌가 생각하고 있습니다. 분명 하이 레벨 쪽의 시장은 윈도우즈가 크고 로우 레벨을 공부하기엔 리눅스가 자료가 많기 때문입니다.
    • xacdo 06/05/02 23:29  수정/삭제
      1. 지적 감사합니다. 최근 상용 리눅스들이 보안 인증을 받지 않고 있기 때문에 객관적인 비교는 힘들겠군요.

      2. 확실히 WIN32가 MFC보다는 우아하죠.

      3. 그렇다고 해서 윈도우의 프로세스 관련 부분이 꼭 나쁘다고는 할 순 없죠. 프로그래머 입장에서 좀 귀찮아서 그렇지, 사용자 입장에서는 별 차이가 없으니까요.

      4. 저는 최근에 MS DRM까지 커널 레벨로 구현되는 것을 보고 할 말을 잃었습니다. 윈도우는 OS 밑단에 손을 못 대게 하는 것은 물론, 아예 댈 필요를 없게 만들죠.
  • CN 06/05/03 17:31  덧글 수정/삭제
    VMS의 가장 큰 결함은 "매우 느린" 프로세스 생성 시간이었고 윈도우즈 NT 계열 역시 프로세스 생성이 빠른 편이 없습니다. 윈도우즈의 프로세스는 구현과 사용자 모두에게 나쁘다고 생각합니다.

    사실 MS OS의 밑단을 공부하는 것은 업그레이드에 의해 무용지용이 되는 경우가 매우 많습니다. 윈도우즈 역시 트랩에 의해 동작하는 운영체제입니다만 인터럽트 번호의 역할을 외우면 서비스 팩 하나 때문에 무용지물이 됩니다. MS는 API라는 훌륭한 인터페이스가 있다는 이유로 커널 단의 배열을 너무 자주 바꿉니다 (...)
    • xacdo 06/05/03 22:34  수정/삭제
      윈도우가 프로세스의 생성시간이 느린 편이었군요. 그래서 프로세스를 쓰레드의 껍데기로 만들고 스케쥴링을 쓰레드에게만 할당하는 방식을 채택한 것 같네요. 기존 버전과 호환성을 중요하게 여기는 MS로서는, 현재의 프로세스 생성방식이 느리지만 포기할 수도 없고, 그래서 쓰레드는 비교적 빠르니까 프로세스는 형태만 유지하고 실질적인 실행의 흐름은 쓰레드로 옮겨오는 형태로 극복한 것 같군요.

      윈도우의 API는 워낙 강력해서, 리얼타임 OS를 테스트 목적으로 API로 구현하는 실험실도 봤습니다. OS를 구현할 수 있을 정도라니 말 다했죠.
  • 07/03/26 04:54  덧글 수정/삭제
    관리자만 볼 수 있는 댓글입니다.
이름
비밀번호
홈페이지 (없어도 됩니다)

비밀글로 등록
작도닷넷은 당신을 사랑합니다.
태그: ,

[이전 목록]   [1] ... [3][4][5][6][7][8][9][10][11]   [다음 목록]

최근 글

이웃로그 관리자 옛날 작도닷넷 태터툴즈 ©현경우(xacdo) since 2001