메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

솔라리스 애플리케이션을 리눅스로 포팅하기

리눅스로 애플리케이션 포팅하기

Malcom Zung, Linux Application Development Tools, , IBM Canada Ltd.
Malcom Zung은 현재 Linux 애플리케이션 개발 활성화를 위해 노력하고 있다. Malcom은 IBM Distributed Debugger와 IBM C Compiler 프로젝트에도 참여했었다.
Brian Thomson, Linux Application Development Tools, , IBM Canada Ltd.
Brian Thomson은 Linux 애플리케이션 개발 활성화를 위해 노력하고 있다. Brian은 IBM의 많은 프로젝트에서 핵심 아키텍트로서 일했다.

요약:  IBMer Malcom Zung과 Brian Thomson은 Solaris에서 Linux로 애플리케이션 포팅을 하는 이유를 비롯하여 가이드라인, 제안, 리소스를 제공하고, Linux와 호환을 목적으로 Solaris 애플리케이션에 사용되는 API 검토에 사용되는 툴도 제공한다.

원문 게재일:  2001 년 10 월 01 일
난이도:  초급
페이지뷰:  2683 회
의견:  


리눅스 운영체제의 채택과 그에 따른 교육이 정부와 민간 차원에서 확대되어가고 있는 상황에서 많은 IT 기업들이 그들의 애플리케이션을 리눅스 환경으로 포팅(porting)하기 위해 많은 시도를 하고있다. 여러분들이 리눅스를 개발 환경의 대안 또는 주요 개발 환경으로 고려하고 있고 표준 언어로 작성된 유닉스 애플리케이션을 사용한다면 리눅스로의 포팅은 그렇게 어렵지 않을 것이다.

애플리케이션을 리눅스에 포팅(porting)할 때 필요한 변수들을 이미 알고 있다고 가정하고, 기술적인 부분으로 넘어가도록 하자.

왜 리눅스로 전환하는가?

많은 사람들이 리눅스로 전환하려고 하는 이유는 수없이 많다. 기술적인 면과 운영 상의 장점들, 특히 커널 2.4의 발표로 인해 더욱 다양화된 기능과 활용성 등으로 인해 기술적 향상을 시도하기 위해서다. (참고자료)

유연성

리눅스 소스 코드는 자유롭게 수정하고 재배포 할 수 있다. 상용 프로그래밍 언어를 이용하여 개발하고 디버깅하는 개발자들은, 상용 프로그래밍 언어가 어떠한 방식으로 만들어졌고, 코드가 어떻게 사용되었는지 알고 있다면, 작업이 훨씬 쉽고 간편해 진다는 것을 알고 있을 것이다. 만약 어떠한 문제가 있는 기능을 수정하거나, 추가하고자 하는 기능들이 있다면 GNU GPL 라이센스로 제공되는 리눅스의 프로그램들을 수정하고 재배포 할 수 있다. SAP과 같은 엔터프라이즈 환경을 위한 핵심 상업용 소프트웨어들을 리눅스에서 사용할 수 있다. SAP의 Linux Technology FAQ (참고자료)을 통해, SAP에서 어떻게 리눅스의 장점을 취하고 있는지 더욱 자세히 알아볼 수 있다.

그리고 메인프레임에서 파워PC, 스팍, 알파, PA-RISC와 인텔 호환 프로세서에 이르기까지, 다양한 범위의 프로세서와 개인용 정보기기 및 임베디드 시스템에 리눅스의 장점을 이용할 수 있다. 리눅스는 또한 완벽한 TCP/IP 스택과 IP 버전 6의 라우팅과 방화벽 기능을 제공하고 있다. 최신 버전의 커널은 높은 성능의 HTTP 서버, 논리적 볼륨 매니저(LVM), 많은 수의 컴퓨터를 관리하고 수퍼컴퓨터에서 요구되는 클러스터링 기능을 사용할 수 있도록 커널 자체에 탑재하고 있다. 리눅스는 복구 능력이 좋은 저널링 파일시스템과 다른 시스템과의 호환성과 신뢰성을 위한 RAID 등의 다양한 종류의 파일시스템 타입을 지원한다. 이러한 리눅스의 호환성은 사용자가 자유롭게 추가 변경할 수 있는 오픈 소스 개발 모델이기 때문에 가능한 것이다.

안정성

리눅스의 안정성은 이미 널리 알려진 사실이다. Gartner Group의 평가에서, 리눅스는 RISC 유닉스와 동등한 평가 등급인 'excellent' 등급을 받았으며 이는 윈도우 NT와 2000 서버를 앞서는 등급이다. (참고자료)

보안성

보안에 대한 사실은 리눅스 운영체제의 아주 기본적인 부분이라고 할 수 있다. 보안 레이어에 대한 적용은 유해한 사용자가 근본적인 취약점을 이용할 것이라는 사실을 가정한 것이다. 리눅스 보안은 리눅스 커널 레벨에서 이루어는 것이며, 취약성이 발견되면 곧바로 몇 천명의 개발자들에 의해 재빨리 수정된다. 특히 리눅스 네트워크 보안은 리눅스의 강점이라고 할 수 있다. 리눅스는 확장된 라우팅과 방화벽 기능을 내장하고 있다. Gartner Group의 보고서(참고자료) 에서는 리눅스를 보안적인 면에서 추천하고 있는데 그 이유는 리눅스 뛰어난 보안 능력 때문이다.

확장성

리눅스는 이전에는 대칭 다중 프로세서 시스템(SMP) 상에서 상업용 유닉스 시스템보다 성능이 떨어졌었다. 하지만, 뛰어난 확장성을 가진 2.4 커널의 발표로 현재는 완벽하게 4-way SMP 시스템을 지원하며 8-way를 이용한 SEPCweb99 벤치마크 결과에서 매우 훌륭한 결과를 나타냈다. 리눅스는 클러스터링 기술을 이용하여 대용량의 분산된 작업을 수행할 수 있으며, 그 뛰어난 예로서 쉘(Shell) 사에 의해 구축된 1024노드의 클러스터 시스템과 구글 검색 엔진에서 사용되는 8000개 이상의 리눅스 시스템을 들 수 있다. (참고자료)

시스템 요구 사항

리눅스는 대용량의 메모리와 고속의 프로세서를 사용할 수 있다고는 하지만 그만큼 뛰어난 사양의 시스템이 아니어도 잘 작동된다. 리눅스는 486 프로세서에서도 무리 없이 실행이 되고, 서버로 사용할 경우에 리눅스는 기본적으로 X 서버를 선택하지 않으므로, GUI 환경을 이용하여 요구되는 시스템 자원을 절약할 수 있다.

엔터프라이즈 환경 준비

많은 기업들이 리눅스를 중요한 시스템으로 채택하는 현재의 실정을 감안할 때 리눅스는 점차 엔터프라이즈 환경으로 채택될 수 있는 준비단계를 거쳐 시작 단계에 접어들었다고 할 수 있다. (참고자료)

비용

'자유 소프트웨어' 추종자들이 '자유'라는 의미는 사용상의 자유로움을 의미하지 비용이 아니라고 이야기하고는 있지만, 리눅스는 큰 예산이 들지 않는다. 저렴한 비용으로 사용할 수 있으며 추가적인 사용권에 대해 사용료를 지불하지 않는다. 그리고 서버 애플리케이션과 개발 툴을 기본적으로 제공하기 때문에 다른 시스템 상에서 추가적으로 사용할 수 있다. 게다가 많은 오픈 소스 개발 공동체는 지속적으로 무료나 저렴한 비용으로 사용할 수 있는 거의 모든 범주의 리눅스용 소프트웨어를 개발하고 발표하고 있다. 샌프란시스코의 'BAY Area Rapit Transit' 시스템은 24시간 내내 기차 제어 워크스테이션용으로 리눅스를 채택하여 프로젝트 예산의 15-20%를 절감하였다.

기능과 지원 서비스

리눅스가 대중화됨에 따라 IBM, 리눅스케어, 레드햇, 수세와 같은 많은 기업들이 교육 및 사용자 레벨의 시스템 관리 지원과 개발 서비스를 포함하여 리눅스 지원 서비스를 제안하고 있다. 이러한 현 상황은 리눅스 교육의 활성화에 큰 역할을 한다. 리눅스는 학교에서는 매우 인기가 있기 때문에 많은 새로운 졸업생들을 리눅스에 대한 경험을 가지고 사회에 진출하게 된다. 거의 모든 도시에 있는 리눅스 사용자 그룹은 숙련된 사용자들에게는 지역 연락책의 자원이 되며, 웹사이트와 인터넷 뉴스 그룹은 리눅스 사용 정보와 비공식 기술 컨설턴트의 효과적인 자원이 되는 셈이다.

시장 성장률

만약 여러분이 판매를 목적으로 소프트웨어를 개발하고 있다면 IDC가 보고한 2004년까지 28%의 리눅스 서버 성장률에 관심이 있을 것이다. (참고자료). 하지만 실질적인 성장률은 예측하기가 매우 어렵고 약간은 더 높을 것이다. 왜냐하면 하나의 패키지로 12대의 시스템에 적용할 수도 있을 가능성이 있기 때문이다.

개발 시스템으로서의 사용 용이성

리눅스 코드는 저급의 시스템에서 개발되어 대형의 서버로 이전될 수도 있기 때문에 대형 시스템의 특징들이 개발 시점에 반영된다. 오픈 소스 개발 연구소에서는 고급 리눅스 시스템을 이용하여 엔터프라이즈 또는 그에 상응한 환경에서의 리눅스의 장점을 이끌어내기 위한 오픈 소스 프로젝트를 진행중이다. 유사하게 IBM의 Linux Community Development System은 IBM 메인프레임에 맞는 리눅스를 개발할 수 있도록 자격을 부여하고 있다(참고자료)

기타

각종 서적과 인터넷 상에서 제공되는 내용들은 리눅스가 엔터프라이즈 시장으로 옮겨가고 있다는 것을 시사한다. 다음은 주요 내용들이다:

  • "짧은 기간 안에, 저렴한 비용으로 유닉스의 기능을 사용할 수 있는 것은 리눅스가 엔터프라이즈 환경에서 추천 받은 이유이다." -- Gavin Sherry, Linux and the Enterprise.
  • "시스템의 구조나 조건에 상관없이 지속적으로 애플리케이션을 개발할 수 있는 능력이다. 공개되어진 리눅스 모듈은 손목시계에서부터 수퍼컴퓨터까지 모든 곳에서 실행이 가능하다."-- Sam Palmisano, Keynote at LinuxWorld 2001.

유닉스 애플리케이션 포팅을 통한 리눅스 도입 시 고려 사항

비용절감 효과, 유용하고 뛰어난 능력, 공급의 증가, 빠르게 성장하는 시장 때문에 리눅스로 전이를 결정했다면, 잠재적인 비용 부담과 위험 부담 및 전이 방법에 대해서도 고려해야 한다. 다음은 리눅스로 전환하기 전에 점검 해야 할 항목과 질문의 요지이다.

  • 마이그레이션에 막대한 초기 비용이 들지는 않는가?

    소프트웨어 개발 플랫폼을 바꾸려 할 때, 새로운 작업을 할 수 없을 만큼의 긴 기간과, 모든 인원을 동원하며, 막대한 자본을 들여서 할 것으로 예상하고 있는가? 몇몇의 프로젝트 관리자들은 그러한 조건으로 작업을 진행 하려고 할 것이다. 이러한 계획은 그들에게 오랜 기간 동안 작업하지 않아도 되는 동기를 부여하는 것이다.

    다행히, 솔라리스에서 리눅스로의 이전은 이러한 문제점들을 일으키지 않는다. 정말로 가능성이 충분하여 앞서 언급한 "Big Bang"식의 접근방식을 피할 수 있다. 이 글의 마이그레이션 방법론 섹션에서는 비용을 절감하고 위험 부담을 줄이면서 진행할 수 있는지를 설명할 것이다. 즉, 여러분은 각 단계를 독립적으로 수행할 수 있으며, 한 단계를 마칠 때마다 작업 우선순위와 목표를 재평가 할 수 있다는 것이다. 평가의 결과는 쉽게 처리 할 수 있으나, 너무 쉽게 처리 했을 경우 사업에 직접적인 영향을 미친다.

  • 얼마나 들것이며 얼마나 걸릴 것인가?

    이것은 마이그레이션 하려고 하는 애플리케이션의 수준에 따라 결정된다. 다음과 같은 요인들을 들 수 있다:

    • 컴파일러 호환
    • 애플리케이션의 하드웨어 의존성 (단어 길이나 바이트 의존성)
    • 플랫폼 실행시간 서비스
    • 제작 툴 의존성
    • 데이터베이스, 네트워킹, 메시징 미들웨어와의 연관성
    • 사용자 인터페이스 이식성
    • 테스트케이스와 테스트 환경

    포팅 작업의 크기와 복잡성은 시스템과 환경 의존성 프로그램에 직접적인 영향을 미친다. 만약 여러분의 애플리케이션이 표준언어 구조와 표준 라이브러리로 작성되었고, 스팍 프로세서 상의 솔라리스에서 실행된다는 사실이 크게 문제가 되지 않는다면 예를 들어 자바 애플리케이션을 포팅하는 것은 매우 쉬운 작업이 될 것이다. 다른 한편으로 만약 여러분의 애플리케이션이 솔라리스 상의 POSIX 표준이 아닌 서비스를 사용하는 C 프로그램이거나 리눅스를 지원하지 않는 써드파티 제품이라면 마이그레이션 작업은 매우 어려워질 것이다.

    더 자세한 정보를 원하면 마이그레이션 방법론을 보도록 한다. 이 글의 마이그레이션 툴과 아웃소싱 섹션에서는 애플리케이션을 마이그레이션 하는 방법을 설명하겠다.

  • 내 애플리케이션이 솔라리스에서도 사용될 수 있도록 할 것인가?

    리눅스와 솔라리스 중 하나를 선택하는 것을 원하지 않는다면 이렇게 하기 바란다. 애플리케이션을 포팅할 때, 이식이 불가능한 부분은 이식이 쉬운 것으로 대체 해야 할 것이다. 여러분은 솔라리스를 GNU 툴로, 솔라리스 전용의 라이브러리 대신 POSIX 호환 쓰레딩 라이브러리로 대체해야 할 것이다. POSIX 호환 툴들과 인터페이스는 솔라리스에서도 사용이 가능하고, 그 솔라리스 옵션을 리눅스로 이전해서도 사용할 수 있기 때문이다.


마이그레이션 방법론

다음의 직접적인 접근 방법으로 솔라리스 에서 리눅스로 단계적으로 이전할 수 있다. 최소한의 노력으로 주요 개발 업무와 포팅 작업을 병행할 수 있다. 만약 제대로만 된다면, 애플리케이션은 리눅스와 솔라리스 환경에서 똑같이 마무리 지을 수 있다.

리눅스 운영체제와 개발툴, 그리고 거의 대부분 언어들의 컴파일러들은 무료이며, 인터넷에서 다운 받을 수 있다. 포팅 작업을 하기 위해 필요한 것은 하드웨어와 개발 능력뿐이다.

C와 C++ 애플리케이션의 경우, Step 1에서 언급한 대로 솔라리스 상에서 리눅스 개발툴로 변경할 것을 추천한다. 이 작업은 좀더 단계적인 이전을 가능하도록 한다. 선택 사항인 Step 2에서는 여전히 SUN 하드웨어 상에서 실행하면서 리눅스 운영체제에 익숙해지도록 하는 중재적인 단계를 제공한다. 마지막으로 Step 3에서는 애플리케이션을 SUN 하드웨어에서 분리시킨다.

자바 애플리케이션 포팅의 경우, 바로 Step 3 으로 넘어가도록 한다. 전통적인 자바 애플리케이션은 하드웨어의 의존성이 거의 없다. 포트란 애플리케이션의 경우에도 Step 3으로 바로 넘어간다.

Step 1: 솔라리스 상에서 GNU 툴(GCC/gmake)을 이용하여 C/C++ 애플리케이션을 구축한다.

다음의 리소스는 이러한 작업을 하는데 도움이 될 것이다:

GCC(GNU 컴파일러 모음) 개발툴은 C와 C++ 컴파일러 모두를 포함하고 있다. 왜냐하면 GNU 컴파일러와 make 유틸리티는 리눅스와 마찬가지로 솔라리스 상에서도 제공되기 때문이다. 이러한 툴을 이용하면 애플리케이션을 개발하는 초기 작업은 상대적으로 쉬울 것이다. 그리고 그 다음에는 솔라리스 make 유틸리티 대신 GNU gmake 유틸리티를 이용하여 애플리케이션 구축을 시도해 본다. 여러분의 makefiles에서 사용된 구조에 근거하여, GNU gmake 유틸리티에 의해 생성된 일부 에러 메시지가 나타날 수 있다. 이것은 GNU 유틸리티와 솔라리스의 유틸리티의 차이에 의한 것이다. makefile 내에서 문제점에 대한 도움말은 make 툴 문서를 이용하여 makefiles를 필요에 따라 수정한다.

일단 makefiles를 gmake와 호환이 되도록 수정한 후에는 makefiles 내의 C 컴파일러의 이름을 cc에서 gcc로, C++ 컴파일러의 이름은 CC에서 g++로 변경한다. 그리고 나서 애플리케이션을 리빌드한다. 빌드 할 때 나타나는 에러 메시지가 있다면, 그것은 명령행 옵션 문제와 코드 문제로 구분될 것이다. GNU와 SUN 컴파일러의 사용가능한 명령행 옵션의 차이로 인한 결과로 나타나는 메시지들인지 확인한다. '-c'와 '-g'와 같은 일부 기본적인 옵션을 제외하고는 컴파일러가 허용하는 대부분의 옵션들은 각기 다르다. 레드햇의 솔라리스에서 리눅스 포팅 문서는 이러한 차이점들을 매우 훌륭하게 요약해놓았다.

에러 메시지와 경고 메시지에 관련된 문제를 해결할 수 있다. 이러한 메시지들을 처리하는 가장 간단한 방법은 이러한 에러 메시지들을 파일로 저장해서 하나씩 검사하는 방법이다. 컴파일러 문서를 비교하여 컴파일러간의 차이점을 이해하고 해결할 수 있을 것이다. 이 글의 Migration tools and outsourcing 섹션은 컴파일러의 차이에 의해 애플리케이션에서 발생하는 문제점을 해결할 수 있도록 조언을 줄 수 있는 회사의 목록을 제공한다. 에러 메시지와 경고 메시지에 관련된 문제를 해결할 수 있다. 이러한 메시지들을 처리하는 가장 간단한 방법은 이러한 에러 메시지들을 파일로 저장해서 하나씩 검사하는 방법이다. 컴파일러 문서를 비교하여 컴파일러간의 차이점을 이해하고 해결할 수 있을 것이다.

리눅스로 포팅하고 애플리케이션을 오픈 소스 라이브러리로 연결할 때, 그러한 라이브러리가 속해있는 라이센스와 저작권을 확인하도록 한다. 최소한 여러분이 새로 포팅한 C/C++ 애플리케이션은 GNU C/C++ 실행시간 라이브러리에 링크 되어 있을 것이다. 이러한 라이브러리들은 GNU 저작권 보호를 받는다. 만약 여러분이 포팅하려는 소프트웨어를 특허 환경으로 판매하려고 한다면, 일단 그것은 GNU 툴로 제작되었기 때문에, GNU GPL 라이센스와 GNU LGPL 라이센스 (참고자료)의 항목과 조건에 대해 신중해야 한다. GPL 라이센스의 어떤 조건과 용어는 일단 이 라이센스에 의해 보호 받는 라이브러리를 사용했기 때문에 여러분의 소프트웨어 전체에 영향을 미칠 것이다.

Step 2: 스팍 머신 상에서 리눅스용 애플리케이션을 빌드하고 테스트한다.

다음의 리소스는 이러한 작업에 도움이 될 것이다:

SUN 하드웨어에서 실행 가능한 리눅스 버전을 위의 사이트에서 제공받을 수 있다. 운영체제를 설치하고 제공된 GNU 툴을 이용하여 애플리케이션을 리빌드한다. Step 1에서 GCC를 이용하여 애플리케이션을 구축했기 때문에, Step 2에서 알게 된 차이점들은 솔라리스와 리눅스 간의 실행시간 API(application Programming Interfaces)의 차이점으로 제한될 것이다. 이에 대한 추가적인 정보는 Run-time interfaces 섹션을 보도록 한다. 애플리케이션에 맞도록 필요한 만큼 수정을 가한다. 일단 애플리케이션이 완벽하게 리빌드 되었다면, 전체적인 검증테스트를 실행한다.

Step 3: 기타 다른 하드웨어 상의 리눅스에서 실행될 수 있도록 애플리케이션을 구축하고 테스트한다.

다음의 리소스는 이 단계에 도움이 될 것이다:

포팅하고자 하는 하드웨어용 리눅스를 설치하여 마이그레이션 작업의 마지막 단계를 시작한다. 리눅스가 사용될 수 있는 서버의 일부 예는 넷비스타, 인텔리스테이션, 넷피니티와 새로운 IBM e서버 x시리즈를 포함하여 IBM 인텔 IA32 라인을 들 수 있다. 리눅스는 또한 IBM p시리즈와 z시리즈에서도 사용이 가능하다. 대중적인 수세 인텔/x86용은 저렴한 비용으로 구입이 가능하며 대부분의 인텔 기반의 PC에서 매우 쉽게 설치된다. 또한 수세는 IBM p시리즈와 z시리즈를 지원하는 배포본도 제공하고 있다. (참고자료)

다음에는, 여러분의 소스 트리와 makefiles를 새로운 리눅스 시스템에 복사하여 애플리케이션을 리빌드한다. 만약 여러분이 2단계를 끝내지 않았다면, 솔라리스와 리눅스간 실행 API의 차이점을 해결하기 위해 애플리케이션을 수정해야 할지도 모른다. 추가적인 정보를 위해서 Run-time interfaces 섹션을 참고하기 바란다. 만약 여러분의 애플리케이션이 스팍 고유의 코드를 포함하고 있다면, 코드 섹션에서 문제를 해결하기 위해 필요한 사항들을 수정해야 한다. 포팅된 애플리케이션에 대하여 전체적인 검증 테스트를 실행하여 이 프로젝트를 끝내도록 하자.

자바 애플리케이션

자바로 작성된 애플리케이션을 솔라리스에서 리눅스로 옮기는 작업은 매우 수월한 작업이다. SUN의 Java 2 Platform Standard Edition의 개발툴들은 솔라리스 스팍/x86과 리눅스 x86 모두에서 사용이 가능하다. 자바 커뮤니티 에디션 통합 환경인 SUN의 포르테(Forte)를 사용하고 있는 솔라리스 개발자들로서는 이러한 작업들은 단지 그들의 작업의 연장일 뿐이고 이 통합환경 또한 리눅스에서도 사용이 가능하며 무료로 다운로드가 가능하다.

IBM 또한 리눅스용 Java 2 Developer Kit (참고자료)을 제공하고 있으며 이 제품은 재개발 및 바로 컴파일 할 수 있도록 기능이 향상된 JVM을 포함하고 있다. 추가로, IBM의 상을 받은 제품인 VisualAge for Java IDE는 리눅스 상에서도 사용가능 하다. 기본 에디션은 무료이며 VisualAge Developer Domain 웹사이트에서 무료로 다운로드가 가능하다. (참고자료)

GCC 개발슈트는 자바 소스 파일을 클래스 파일(바이트코드)이나 직접 기계언어로 컴파일 할 수 있는 자바 컴파일러(GCJ)를 포함하고 있다.

JVM은 JVM이 실행되는 운영체제에 상관없이 동일한 바이트코드를 사용할 수 있기 때문에, 하나의 운영체제 시스템과 다른 시스템상에서 동일한 결과의 클래스 파일이 생성되도록 자바 소스 파일의 컴파일 옵션을 포함하고 있다. 예를 들어, 만약 리눅스가 여러분의 주요 개발 플랫폼이라면, 리눅스 상에서 생성된 자바 클래스 파일은 솔라리스나 JVM이 사용 가능한 다른 플랫폼 상에서 동일하게 실행될 수 있다는 것이다. (참고자료)

포트란 애플리케이션

솔라리스 포트란 애플리케이션이 f77 호환제품 이라면, 애플리케이션을 컴파일 하기 위해 GCC 포트란 77 컴파일러(참고자료)를 사용할 수 있을 것이다. GNU 컴파일러 컬렉션 슈트는 g77 컴파일러를 포함하고 있다.

애플리케이션이 현재 SUN의 f90/f95 컴파일러로 작성되었다면, 상업용 포트란 컴파일러를 구입해야 할 것이다. 리눅스용 포트란 90/95툴은 다음의 소스에서 사용이 가능하다:

  • Absoft Development Tools의 Pro Fortran 7.0 (ANSI/ISO Fortran 95) 컴파일러와 디버거
  • The Portland Group의 F77, F90과 HPF 컴파일러, 디버거, 프로파일러
  • Veridian Systems의 VAST/f90 Fortran 컴파일러

런타임 인터페이스

런타임 인터페이스의 대부분이 리눅스와 솔라리스 간에는 일반적이라 해도, 다른 부분도 존재한다. 솔라리스에서는 사용 가능한 인터페이스가 리눅스에서는 똑같지 않거나 실행이 안될 수도 있다. 이러한 부분은 빌드되기 전에 수정되어야 한다.

  • 시스템 호출(call)과 C 라이브러리

    솔라리스 커널은 논리적 볼륨 지원, 파일에 대한 ACL 관리와 시스템 감사 로그 기능을 제공한다. 리눅스 API는 솔라리스와 완벽하게 일치하지 않는다. 또한 STREAMS 지원도 리눅스에서는 기본적으로 지원되지 않는다. 네트워킹에 대하여 STREAMS을 사용하는 애플리케이션들은 STREAMS 대신 POSIX 소켓을 사용하도록 수정되어야 한다.

    또한 리눅스에서 사용 가능한 많은 솔라리스 API들은 다른 리턴 값과 변수 타입을 가지고 있거나, 다른 헤더 파일로 선언되기도 한다. 어쨌든 이러한 차이점들은 종종 애플리케이션에서는 코드를 수정할 필요가 없을 때도 있다.

    리눅스에서의 API 호환성 검사

    솔라리스 애플리케이션의 특수한 API들이 리눅스에서는 어떻게 사용되었는지 보여주는 리포트 기능을 사용하기 위해서 웹 기반으로 제공하는 developerWorks Solaris-to-Linux porting tool을 사용한다.

  • C++ 라이브러리

    솔라리스 포르테 6 C++ 컴파일러는 세 개의 클래스 라이브러리를 포함하고 있다(-compat=4에 대한 복소수, 고전적인 iostreams, 표준 C++ 라이브러리(표준 복소수와 iostreams을 포함). GCC는 오로지 표준 C++ 라이브러리를 포함한다. 만약 -compat=4 복소수 라이브러리나 클래식 iostreams 라이브러리를 이용하여 포팅되었을 경우 그 애플리케이션은 표준 C++ 라이브러리에 포함되어 있는 표준 버전의 라이브러리를 이용하도록 수정해야 할 것이다. 이러한 수정 작업은 애플리케이션의 이식성을 높이게 된다.

  • Math 라이브러리

    솔라리스 math 라이브러리는 십진수를 ASCII 값으로 변환하는 기능을 포함하고 있다. 이 기능은 리눅스의 math 라이브러리에는 없는 기능이다.

  • X 라이브러리와 윈도우 매니저

    Xlib와 Xt를 포함하여 X11R6X 서버는 리눅스 상에서 사용이 가능하다. Motif는 오픈 그룹의 오픈 Motif (참고자료)의 형태로 사용가능하며 라이센스 비용 없이 리눅스 상에서 사용이 가능하다. 리눅스 상에서 일반적인 Motif 대체 애플리케이션은 LessTif (참고자료)로 오픈 소스 Motif의 클론이다.

  • 데스크탑 : CDE와 GNOME/KDE

    솔라리스 데스크탑에서 기본인 CDE는 일반적인 리눅스 배포본에는 포함되어 있지 않다. CDE를 요구하는 애플리케이션이나 특별한 GUI 환경을 선호하는 사용자들을 위해 리눅스 버전의 CDE가 Xi Graphics(참고자료)에서 DeXtop 제품 형태로 제공된다. 리눅스 상에서 DeXtop을 실행하는 것은 솔라리스 사용자들로 하여금 GUI 환경에 익숙해져서 리눅스로 포팅하는 작업을 용이하게 할 수 있다.

    DeXtop은 Xi Graphics의 Accelerated-X 리눅스 X-서버를 요구한다. XFree86 리눅스 X 서버에서 DeXtop를 사용할 수는 있지만, Xi Graphics는 공식적으로 XFree86 상에서의 DeXtop을 지원하지는 않는다.

  • 쓰레드/LWP(LightWeightProces) 지원

    솔라리스는 POSIX 쓰레드와 솔라리스 고유의 쓰레딩 모델 모두를 지원한다. 만약 애플리케이션이 솔라리스 고유의 쓰레드 API를 이용하여 포팅된다면, 그대신 POSIX 쓰레드를 이용하도록 애플리케이션을 수정해야 한다. POSIX 쓰레드는 리눅스 상에서 지원이 되며 리눅스 상에서 좀더 이식성이 뛰어나다.

    리눅스/알파로 포팅하는 사람들을 위한 또 다른 옵션은 컴팩에 의해 개발된 리눅스/알파용 솔라리스 호환 쓰레드 라이브러리를 사용하는 것이다. 이 오픈 소스 패키지에 대한 자세한 내용은 컴팩의 'Linux Affinity Web Page'를 참고한다. (참고자료).

  • 프로세스 관리: /proc 파일시스템

    /proc 의사(pseudo) 파일시스템은 커널 데이터 구조에 접근하는 편리한 방법을 제공한다. 솔라리스 상에서 /proc은 활성화된 프로세스와 쓰레드에 대한 정보를 포함하고 이러한 프로세스와 쓰레드를 제어할 수 있는 인터페이스를 제공한다. 솔라리스에서 /proc 제어 인터페이스는 전형적으로 프로그램 실행을 추적하기 위한 디버거에 의해 사용되며, 리눅스 상에서 /proc는 프로세서 제어 인터페이스를 제공하지 않는다. 리눅스 상에서 디버깅을 위한 프로세스를 제어하기 위해서 /proc의 ptrace() API를 사용한다.

포팅과 관련된 추가 사항들

  • 시스템 관리

    일반적으로, 리눅스 관리는 다른 유닉스 운영체제의 관리와 매우 유사하다. 명령과 작업에서 일부 특수한 차이점들이 존재한다. IBM과 유닉스 지침서에서는 솔라리스와 리눅스 뿐만 아니라 AIX와 기타 다른 버전의 유닉스의 일부 차이점들을 요약한 비교 차트를 공개해 놓았다. (참고자료). 솔라리스 시스템 관리는 리눅스 상에서 완벽히 호환되지는 않는다.

  • 소스 코드 관리

    솔라리스 상에서 SUN 포르테 팀 웨어 또는 SCCS(Source Code Control System)을 이용하는 개발자들은 SCCS 스타일 소스 코드 관리 시스템을 이용하여 GNU CSSC(Compatibly Stupid Source Sontol)과 오픈 소스 SCCS 클론을 이용할 수 있기를 원한다. 리눅스 상에서 일반적으로 사용되고 추천되는 소스 코드 관리 시스템은 CVS(Concurrent Version System)이다. (참고자료)

    Rational ClearCase 소프트웨어 설정 관리 솔루션 또한 솔라리스와 리눅스 상에서 사용이 가능하다. (참고자료)

  • 기타 써드파티 툴, 유틸리티, 라이브러리

    솔라리스 상에서 일반적이고 대중적인 써드파티 툴, 유틸리티와 라이브러리들은 리눅스에서도 사용할 수 있다. 리눅스의 대중화에 힘입어 많은 써드 파티 벤더들은 리눅스에 대한 지원을 높여 가고 있다. (참고자료):

    • Rational Rose와 다른 Rational 제품들은 솔라리스와 리눅스 상에서 모두 사용가능.
    • 소스프로(SourcePro) C++ 라이브러리는 솔라리스와 리눅스의 GCC와 포르테/솔라리스에서 사용 가능.
    • Qt C++ GUI 프레임워크도 솔라리스와 리눅스에서 사용가능.
  • 64비트 컴퓨팅

    레드햇과 수세 및 기타 많은 배포본들은 컴팩/DEC 알파용의 64비트 리눅스 버전을 제공한다. 이에 대한 추가적인 정보는 알파 리눅스 웹사이트에서 찾아볼 수 있다. 64비트 솔라리스와 64비트 리눅스/알파 모두 뛰어난 호환성을 기록하는 LP64 데이터 모델을 사용한다.

    곧 64비트 리눅스 버전은 Itanium IA-64 프로세서에서도 사용이 가능할 것이다. 추가적인 정보는 리눅스프로젝트(LinuxProject) 웹사이트에서 제공한다. IBM 64비트 파워PC 아키텍쳐도 개발 중에 있다.

    수세 리눅스/울트라 스팍의 커널은 64 비트 모드에서 실행이 되지만, 64비트 사용 공간 애플리케이션은 현재 수세리눅스/울트라스팍에서 지원되지 않는다.

  • Endian format

    SUN 스팍과 울트라 스팍 프로세서는 빅엔디안(Big Endian) 형식으로 정수를 저장한다. 애플리케이션을 리눅스/인텔용과 같은 리틀엔디안(Little Endian) 버전의 리눅스로 포팅하고 싶다면, 애플리케이션이 제대로 실행되기 전에 애플리케이션 내의 엔디안 포맷에 대한 의존성을 해결해야 할 것이다. 대안책으로, 애플리케이션은 리눅스/인텔 대신 빅엔디안 플랫폼인 파워PC, z시리즈, 스팍용으로 사용될 수 있다.

  • 교육

    인터넷을 통해 리눅스를 공부할 수 있다. 리눅스존 튜토리얼(IBM의 developerWorks Linux zone) 과 IBM의 Linux, UNIX, and open source course catalog은 리눅스 학습의 좋은 출발점이 될 수 있을 것이다. 리눅스 소개에서 부터 리눅스용 DB2, zSeries & S/390용 리눅스, Perl, 오픈 소스등에 이르기까지 범주는 다양한다.


마이그레이션 툴과 아웃소싱

MigraTEC은 하나의 플랫폼에서 다른 플랫폼으로 애플리케이션을 마이그레이션하는 툴을 특화 시킨 업체이다. MigraTEC의 포팅 슈트는 마이그레이션 워크벤치(Migratin WorkBench)를 포함하며 이 툴은 여러분의 애플리케이션에서 포팅 과정 중에 수정이 필요한 부분을 구별할 수 있다. 또한 워크벤치는 솔라리스에서 리눅스로의 전환에 필요한 완벽한 API 맵을 가지고 있는데, 이 툴은 애플리케이션에서 호출되는 솔라리스 API를 리눅스로 호환시킨다.

파라소프트(ParaSoft) 사의 자동 C/C++ 코딩 표준 실행 툴은 코드위저드(CodeWizard)라고 불리우며 룰위저드(RuleWizard)라는 기능을 포함하는데 이 기능은 사용자로 하여금 일반적인 코딩 규칙을 생성할 수 있도록 한다. 코드위저드와 룰위저드를 이용하여 이식성과 마이그레이션을 지원하는 툴을 작성할 수 있다.

전체적인 마이그레이션 작업을 아웃소싱을 위해 IBM 글로벌 서비스, MigraTEC과 Sector7과 같은 업체들은 기초적인 포팅 작업부터 마무리까지 제공한다. IBM 글로벌 서비스는 최근 마이그레이션, 컨설팅, 기획, 교육과 지원에 대한 뛰어난 리눅스 서비스 포트폴리오를 구축했다.


참고자료

필자소개

Malcom Zung은 현재 Linux 애플리케이션 개발 활성화를 위해 노력하고 있다. Malcom은 IBM Distributed Debugger와 IBM C Compiler 프로젝트에도 참여했었다.

Brian Thomson은 Linux 애플리케이션 개발 활성화를 위해 노력하고 있다. Brian은 IBM의 많은 프로젝트에서 핵심 아키텍트로서 일했다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=리눅스
ArticleID=18150
ArticleTitle=솔라리스 애플리케이션을 리눅스로 포팅하기
publish-date=10012001
author1-email=
author1-email-cc=
author2-email=
author2-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.