RFC 34: 사용 허가 정책 시행

저자: 프랑크 바르메르담

연락처: warmerdam@pobox.com

상태: 개발 중

요약

이 RFC는 응용 프로그램 및 최종 사용자가 사용 허가(license) 정책을 정의할 수 있는, 그리고 GDAL이 독점 및 상호 사용 허가 응용 프로그램과 포맷 드라이버 간의 사용 허가 충돌을 방지하는 데 도움을 줄 수 있는 새 메커니즘을 추가할 것을 제안합니다.

정의

  • 상호 자유-오픈 소스 소프트웨어(Free and open-source software; F/OSS 또는 FOSS) 사용 허가: 동일한 실행 파일에 연결되고 생성자를 넘어 배포되는 다른 모든 소프트웨어의 구성 요소들도 오픈 소스 조건에 따라 제공되어야 한다는 GNU 일반 공중 사용 허가서(GNU General Public License; GNU GPL 또는 GPL) 같은 오픈 소스 소프트웨어 사용 허가를 말합니다.

  • 비상호 FOSS 사용 허가: 배포 시 동일한 실행 파일에 연결된 다른 구성 요소들에 대해 어떤 요구도 하지 않는 MIT, BSD(Berkeley Software Distribution) 또는 GNU 약소 일반 공중 사용 허가서(GNU Lesser General Public License; LGPL) 같은 오픈 소스 소프트웨어 사용 허가를 말합니다.

  • 독점(proprietary) 사용 허가: 오라클(OCI), 리자드테크(MrSID) 및 Erdas(ECW)의 라이브러리들처럼 오픈 소스 정의의 요구 사항들을 준수하지 않는 조건에 따라 제공되는 소프트웨어 사용 허가를 말합니다. 무료로 제공되는 경우가 많지만, 이런 구성 요소들은 상호 FOSS 사용 허가와 호환되지 않으며 배포자 또는 최종 사용자에게 여러 가지 기타 제한들을 가할 수도 있습니다.

근거

독점 및 오픈 소스 응용 프로그램이 GDAL/OGR를 사용할 수 있게 해주고 오픈 소스 포맷 드라이버와 함께 독점 포맷 드라이버를 포함할 수 있게 해주는 비상호 MIT 오픈 소스 사용 허가에 따라 GDAL/OGR를 배포합니다. 하지만 그렇다 하더라도 (QGIS 및 GRASS 같은) GDAL을 사용하는 상호 사용 허가된 응용 프로그램을 (MrSID, ECW 또는 오라클 드라이버 같은) 독점 사용 허가된 드라이버와 함께 배포하는 것은 사용 허가를 위반하는 것입니다. 마찬가지로, 독점 응용 프로그램을 GDAL GRASS 드라이버 또는 PDF 드라이버 같은 상호 사용 허가된 드라이버와 함께 배포하는 것 또한 사용 허가를 위반하는 것입니다.

이 RFC 그리고 이 RFC가 시행하는 개성 사항들의 목적은 사용자, 응용 프로그램 및 드라이버가 의도하지 않은 사용 허가 위반을 방지할 수 있도록 사용 허가 정책을 쉽게 설정하고 준수할 수 있게 해주는 것입니다. OSGeo4W 처럼 소프트웨어를 광범위하게 배포하는 분야에서 특히 도움이 될 수 있습니다.

접근 방법

드라이버가 자신의 사용 허가 카테고리를 선언하고, 응용 프로그램 및 최종 사용자가 어떤 종류의 드라이버를 함께 사용할 수 있는지를 선언하게 하는 일반 접근법을 제안합니다. 의도하지 않은 사용 허가 위반을 방지하기 위해 GDALDriverManagerOGRDriverRegistrar 클래스에 이 정보를 적용할 것입니다.

드라이버

드라이버는 자신의 “LICENSE_POLICY” (DMD_LICENSE_POLICY) 메타데이터 항목을 통해 다음 세 가지 드라이버 특화 사용 허가 정책 가운데 하나를 선언할 것입니다:

  • “RECIPROCAL”: GPL 같은 상호 FOSS 사용 허가에 따라 이 드라이버를 사용할 수 있고, 독점 드라이버 또는 응용 프로그램과 함께 사용해서는 안 됩니다.

  • “NONRECIPROCAL”: MIT 또는 LGPL 같은 비상호 FOSS 사용 허가에 따라 이 드라이버를 사용할 수 있습니다. 어떤 사용 허가 정책도 선언하지 않을 경우의 기본값으로, 외부 의존성을 가지지 않은 GDAL의 일부분으로서 제공되는 드라이버의 네이티브 정책입니다.

  • “PROPRIETARY”: 이 드라이버는 일반적으로 독점 라이브러리를 사용한다는 이유 때문에 상호 사용 허가된 소프트웨어와 함께 배포할 수 없도록 하는 사용 허가 제한 사항을 몇 가지 가지고 있습니다. MrSID, ECW 및 오라클 관련 드라이버가 포함됩니다.

응용 프로그램 사용 허가 정책

응용 프로그램에 해당 응용 프로그램의 본질을 반영하는 다음 사용 허가 정책들 가운데 하나를 설정하도록 권장합니다. 일반적으로 GDALAllRegister() 또는 OGRRegisterAll() 메소드를 호출하기 ‘전에’ GDALSetConfigOption() 메소드를 호출해서 GDAL_APPLICATION_LICENSE_POLICY 환경설정 옵션의 값으로 정책을 설정해야 합니다.

  • “RECIPROCAL”: GPL 같은 상호 사용 허가에 따라 이 응용 프로그램을 사용할 수 있고, 독점 드라이버를 불러와서는 안 됩니다.

  • “PROPRIETARY”: 이 응용 프로그램은 상호 사용 허가된 소프트웨어와 함께 배포할 수 없도록 하는 사용 허가 제한 사항을 몇 가지 가지고 있습니다. GRASS 및 PDF 드라이버 같은 상호 사용 허가된 드라이버를 불러오지 않도록 주의해야 합니다.

  • “DEFAULT”: 이 응용 프로그램에 어떤 사용 허가 정책도 적용하지 않습니다. MapServer처럼 GPL을 따르지 않는 오픈 소스 응용 프로그램들의 전형적인 사례로, 아무것도 선언하지 않는 경우 기본 정책이 될 것입니다.

사용자 사용 허가 정책

배포 시점에 일반적으로 독점 소프트웨어와 상호 사용 허가된 소프트웨어를 함께 사용하지 못 하도록 제한합니다. 이런 제한 조건은 최종 사용자가 자신의 필요에 따라 자신에게 알맞도록 사용하기 위해 다양한 구성 요소들을 조합하는 일을 특별히 막으려는 의도가 아닙니다. 이를 위해, 최종 사용자에게 상호 사용 허가된 구성 요소와 독점 구성 요소를 함께 사용하는 것을 제한하는 조건을 의도적으로 무시할 수 있는 메커니즘을 제공하는 일이 중요합니다. 환경 변수를 통해 또는 일반적으로 대부분의 GDAL 응용 프로그램에 사용할 수 있는 --config 명령줄 스위치를 통해 설정할 수 있는 GDAL_LICENSE_POLICY 환경설정 옵션을 사용하면 됩니다. 이 옵션은 다음 값들 가운데 하나로 설정할 수 있습니다:

  • “USE_ALL”: 어떤 드라이버도 사용 허가 제한 조건을 기반으로 폐기하지 않습니다.

  • “PREFER_PROPRIETARY”: 독점 드라이버와 상호 사용 허가된 드라이버 사이에 충돌이 있을 경우 독점 드라이버를 사용합니다.

  • “PREFER_RECIPROCAL”: 독점 드라이버와 상호 사용 허가된 드라이버 사이에 충돌이 있을 경우 상호 사용 허가된 드라이버를 사용합니다.

이 환경설정 옵션으로 사용자 사용 허가 정책을 설정할 수 있을 뿐만 아니라, 환경설정 또는 nmake.opt 선언으로도 기본 GDAL_LICENSE_POLICY 환경설정 옵션을 변경할 수 있을 것입니다. 따라서 환경 변수 또는 명령줄 스위치를 설정할 필요없이 빌드 시 로컬 빌드를 “USE_ALL”로 환경설정할 수 있습니다. 다만 재배포되는 소프트웨어의 경우 이 방법을 사용할 수 없을 것입니다.

정책 논리

  1. 사용자가 GDAL_LICENSE_POLICY 환경설정 옵션을 “USE_ALL”로 선택하는 경우 어떤 드라이버도 사용 허가를 기반으로 불러오기 해제하지 않습니다.

  2. 사용자가 GDAL_LICENSE_POLICY 옵션을 “PREFER_PROPRIETARY” 또는 “PREFER_RECIPROCAL”로 선택하는 경우 GDAL_APPLICATION_LICENSE_POLICY 환경설정 옵션을 무시합니다.

  3. 응용 프로그램이 GDAL_APPLICATION_LICENSE_POLICY 옵션을 “PROPRIETARY” 또는 “RECIPROCAL”으로 선택하는 경우 해당 정책을 사용합니다.

  4. 사용자 또는 응용 프로그램 수준에서 정책을 선택하지 않는 경우, 기본값은 “PREFER_PROPRIETARY” 정책입니다.

GDALDriverManager::AutoSkipDrivers() 메소드 및 새로 도입된 OGRSFDriverManager::AutoSkipDrivers() 메소드에 사용 허가 정책을 적용할 것입니다. 이미 GDAL_SKIP(그리고 곧 OGR_SKIP)을 기반으로 드라이버를 불러오기 해제하기 위해 AutoSkipDrivers() 메소드를 사용하고 있는데, 일반적으로 드라이버 예비 등록 이후 호출합니다.

엄격한 연결 수준 준수

선두적인 상호 사용 허가인 GPL은 연결된 독점 코드를 가진 GPL 응용 프로그램에 관해 설명합니다. 문자 그대로, 연결된 혼합 코드를 가진 프로세스가 아직 실행 중일 수도 있습니다. 연결 시점에서 문제를 지적하는 대신, 런타임 시 호환되지 않는 구성 요소의 사용을 비활성화시킵니다. 이때 GPL 사용 허가의 요구 사항을 문자 그대로 준수하지 않는다고 간주될 수도 있는 위험이 조금 존재하지만, 실질적인 의미에서 GPL을 시행하기 위해 모든 합리적인 노력을 기울이고 있다는 사실 또한 분명합니다.

독립형 소프트웨어 패키지를 GDAL과 함께 배포하는 상황이라면, 그래도 패키지 준비 도중 응용 프로그램의 사용 허가와 호환되지 않는 모든 구성 요소들을 완벽하게 생략하는 것이 최선일 수도 있습니다. 이 RFC의 주요 목적은 OSGeo4W 같은 복잡한 혼합 구성 요소 배포를 지원하는 것입니다.

영향을 받는 드라이버

다음 드라이버들을 “PROPRIETARY”로 표시해야 할 것으로 보입니다:

  • ECW

  • JP2ECW

  • MRSID

  • JP2MRSID

  • MG4Lidar

  • GEORASTER

  • JP2KAK

  • JPIPKAK

  • ArcObjects

  • OCI

  • FileGDB

  • FME

  • ArcSDE (래스터 및 벡터)

다음 드라이버들은 “RECIPROCAL”으로 표시해야 할 것으로 보입니다:

  • GRASS (래스터 및 벡터)

  • EPSILON

  • MySQL (활성 사용 허가 조건에 따라 다릅니다!)

  • PDF

판단 보류:

  • OGR SOSI 드라이버가 알 수 없는 사용 허가 조건을 가진 바이너리 객체와의 연결에 의존하기 때문에, OGR SOSI 드라이버의 궁극적인 목표가 분명히 오픈 소스임에도 불구하고 아마도 현재로서는 독점으로 표시해야 할 것입니다.

  • MSG – 2세대 Meteosat 의 경우 판단할 수 없습니다. 이 드라이버는 독점 사용 허가 코드와 GPL 사용 허가 코드를 둘 다 가지고 있는 제3자 소프트웨어에 의존하고 있는 것으로 보입니다.

  • ODBC 기반 드라이버에 대해서도 판단할 수 없습니다. PGEO 및 MSSQLSPATIAL 드라이버를 당연히 독점 드라이버로 표시해야 할까요? ODBC 라이브러리의 실제 사용 허가 조건에 따라 달라질 가능성이 있을까요?

표시해야 할 다른 드라이버가 있다면 알려주십시오.

SWIG 바인딩

몇몇 (모든?) SWIG 바인딩은 바인딩을 불러오는 시점에 GDALAllRegister() 그리고/또는 OGRRegisterAll() 메소드를 자동적으로 호출하기 때문에, 스크립트에 드라이버를 등록하기 전에 응용 프로그램 수준 GDAL_LICENSE_POLICY 환경설정 옵션을 설정하기 어렵습니다. 이 문제점을 수정하려면, SWIG을 통해 AutoSkipDrivers() 메소드를 노출시켜 스크립트가 정책을 설정한 다음 시행 중인 정책에 따라 드라이버를 “정리”할 수 있도록 해야 할 것입니다.

테스트 스위트

테스트 방법은?

문서화

문서화 방법은?

구현

프랑크 바르메르담이 트렁크에 핵심을 구현할 것입니다. 드라이버 유지/관리자들은 특정 드라이버들의 메타데이터를 업데이트해야 할 수도 있습니다