바이트코드 인터프리터
1. 개요
1. 개요
바이트코드 인터프리터는 고급 프로그래밍 언어로 작성된 소스 코드를 중간 표현인 바이트코드로 변환한 후, 이를 해석하여 실행하는 소프트웨어이다. 이는 인터프리터의 한 유형으로, 소스 코드를 직접 해석하는 전통적인 인터프리터와는 구별된다. 주요 용도는 플랫폼 독립성을 확보하여 특정 운영 체제나 컴퓨터 아키텍처에 종속되지 않고 프로그램을 실행할 수 있게 하는 것이다. 이 방식은 가상 머신 기반 언어의 핵심 실행 환경을 구성한다.
대표적인 바이트코드 인터프리터 구현에는 자바 가상 머신(JVM), CPython(파이썬의 표준 인터프리터), 그리고 .NET의 공용 언어 런타임(CLR)이 있다. 이러한 시스템은 소스 코드를 각각의 중간 언어(자바 바이트코드, 파이썬 바이트코드, CIL)로 컴파일한 후, 해당 가상 머신 위에서 인터프리터가 이 바이트코드를 실행한다.
바이트코드 인터프리터의 주요 장점은 앞서 언급한 플랫폼 독립성 외에도 높은 안전성을 들 수 있다. 메모리 접근을 엄격히 제어하여 잘못된 접근으로 인한 시스템 충돌을 방지할 수 있다. 또한, JIT 컴파일 기술과 결합하여 자주 실행되는 바이트코드 구간을 네이티브 코드로 실시간 컴파일함으로써 실행 성능을 크게 향상시킬 수 있다.
반면, 단점으로는 일반적으로 네이티브 코드를 직접 실행하는 것보다 실행 속도가 느릴 수 있다는 점이 있다. 이는 바이트코드를 해석하는 과정에서 추가적인 오버헤드가 발생하기 때문이다. 또한, 프로그램을 배포할 때 소스 코드뿐만 아니라 바이트코드도 함께 저장하고 메모리에 로드해야 하므로 추가적인 메모리 사용이 필요하다.
2. 라이선스 유형
2. 라이선스 유형
2.1. 오픈 소스 라이선스
2.1. 오픈 소스 라이선스
오픈 소스 라이선스는 소프트웨어의 소스 코드를 공개하고, 사용자에게 사용, 복사, 수정, 재배포할 수 있는 권한을 부여하는 라이선스이다. 바이트코드 인터프리터의 경우, 이러한 라이선스는 개발자들이 해당 인터프리터의 내부 동작을 연구하고, 필요에 따라 수정하여 자체적인 버전을 만들거나 특정 환경에 최적화할 수 있는 자유를 보장한다. 이는 특히 교육, 연구, 커뮤니티 기반의 개발에 큰 장점으로 작용한다.
주요 오픈 소스 라이선스로는 GNU 일반 공중 사용 허가서(GPL), 아파치 라이선스, MIT 라이선스, BSD 라이선스 등이 있으며, 각 라이선스는 수정된 코드의 재배포 조건과 저작권 고지 의무 등에서 차이를 보인다. 예를 들어, GPL은 파생 저작물도 동일한 GPL 조건 하에 소스 코드를 공개해야 하는 강한 카피레프트 조항을 포함하는 반면, MIT나 BSD 라이선스는 상대적으로 제약이 적다.
대표적인 바이트코드 인터프리터인 CPython(표준 파이썬 인터프리터)은 파이썬 소프트웨어 재단 라이선스 하에 제공되며, 이는 BSD 라이선스와 유사한 허용적 오픈 소스 라이선스이다. 루아 인터프리터 역시 MIT 라이선스를 채택하고 있어 상업적 이용을 포함한 매우 자유로운 사용이 가능하다. 반면, 자바 가상 머신(JVM)을 구현한 OpenJDK 프로젝트는 GPL v2에 클래스패스 예외를 더한 라이선스를 사용한다.
오픈 소스 라이선스를 선택할 때는 해당 라이선스의 구체적인 조건, 특히 수정본의 배포 시 소스 코드 공개 의무 여부를 주의 깊게 검토해야 한다. 이는 최종 소프트웨어 제품의 라이선스 전략과 직결되는 중요한 사항이다.
2.2. 상용 라이선스
2.2. 상용 라이선스
상용 라이선스는 소프트웨어를 사용, 수정, 배포하기 위해 라이선스 비용을 지불해야 하는 조건을 담고 있다. 이 라이선스 모델은 주로 독점 소프트웨어에서 채택되며, 사용자는 라이선스 계약서에 명시된 조건을 엄격히 준수해야 한다. 상용 라이선스는 일반적으로 소스 코드에 대한 접근 권한을 제공하지 않으며, 사용자는 소프트웨어를 블랙박스 형태로만 사용할 수 있다. 라이선스 비용은 종종 사용자 수, CPU 코어 수, 또는 배포되는 애플리케이션의 규모에 따라 결정된다.
바이트코드 인터프리터의 상용 라이선스는 주로 기업 환경이나 고성능이 요구되는 특수 분야에서 발견된다. 예를 들어, 특정 JVM 구현체나 상용 .NET 런타임은 오픈 소스 대안보다 향상된 성능, 보안 기능, 기술 지원을 제공하기 위해 상용 라이선스를 채택하기도 한다. 이러한 라이선스는 소프트웨어를 상업적 제품에 내장하거나 재배포할 때 명확한 법적 근거와 책임 한계를 제공하는 장점이 있다.
라이선스 계약은 사용 범위, 지원 기간, 업데이트 권한, 재배포 조건 등을 상세히 규정한다. 따라서 기업은 소프트웨어 도입 전에 라이선스 조항을 면밀히 검토하여 예상치 못한 법적 분쟁이나 추가 비용을 방지해야 한다. 상용 라이선스의 조건은 공급업체마다 크게 다르므로, 법률 자문을 통한 확인이 권장된다.
2.3. 프리웨어/셰어웨어
2.3. 프리웨어/셰어웨어
프리웨어/셰어웨어 라이선스는 소프트웨어를 무료로 사용할 수 있도록 허용하지만, 상업적 사용이나 특정 기능의 이용에는 제한을 두거나 일정 기간 후에 비용을 지불하도록 요구하는 형태이다. 바이트코드 인터프리터의 경우, 이러한 라이선스 모델은 주로 특정 목적의 개발 도구나 런타임 환경에서 찾아볼 수 있다. 예를 들어, 일부 임베디드 시스템용 인터프리터나 게임 스크립트 엔진이 프리웨어로 배포되어 개인 사용자나 소규모 프로젝트에서 자유롭게 사용되기도 한다.
셰어웨어 모델은 평가판의 형태로 인터프리터를 배포하여, 사용자가 일정 기간 동안 모든 기능을 테스트해 본 후에 정식 라이선스를 구매하도록 유도한다. 이는 상용 소프트웨어의 마케팅 전략으로 자주 활용되며, 바이트코드 인터프리터를 포함한 개발 툴체인에서도 종종 적용된다. 사용자는 라이선스를 구매하기 전에 해당 인터프리터의 성능, 안정성, 그리고 자신의 프로젝트와의 호환성을 충분히 검증할 수 있다는 장점이 있다.
프리웨어/셰어웨어 라이선스는 오픈 소스 라이선스와 달리 소스 코드의 공개를 요구하지 않는 경우가 대부분이다. 따라서 사용자는 소프트웨어의 내부 동작 방식을 수정하거나 개선할 수 있는 권한이 제한될 수 있다. 또한, 상업적 사용에 대한 명시적 허가가 필요할 수 있으므로, 상업적 사용을 계획 중이라면 라이선스 조항을 주의 깊게 확인해야 한다. 이러한 라이선스는 자유 소프트웨어의 철학과는 거리가 있지만, 소프트웨어의 접근성을 높이고 저비용 진입 장벽을 제공한다는 점에서 의미가 있다.
3. 주요 바이트코드 인터프리터 및 라이선스
3. 주요 바이트코드 인터프리터 및 라이선스
3.1. Java Virtual Machine (JVM)
3.1. Java Virtual Machine (JVM)
자바 가상 머신(JVM)은 자바 프로그래밍 언어의 핵심 실행 환경으로, 자바 컴파일러가 생성한 바이트코드를 해석하고 실행하는 가상 머신이다. JVM의 주요 목적은 "한 번 작성하면 어디서나 실행된다"는 자바의 철학을 실현하는 것으로, 특정 하드웨어나 운영 체제에 종속되지 않고 다양한 플랫폼에서 동일한 자바 프로그램을 실행할 수 있게 한다. 이는 JVM이 각 플랫폼에 맞게 구현됨으로써 가능해진다.
JVM의 구현체는 여러 가지가 존재하며, 그 라이선스 정책도 다양하다. 가장 널리 알려진 구현체는 오라클이 관리하는 HotSpot JVM이다. 오라클은 자바 개발 키트(JDK)와 자바 런타임 환경(JRE)을 배포하며, 오라클 JDK 17 버전부터는 무료로 사용할 수 있는 NFTC 라이선스와 상용 지원이 필요한 상용 라이선스를 병행하고 있다. 한편, 오픈소스 커뮤니티 주도로 개발되는 OpenJDK 프로젝트는 GNU 일반 공중 사용 허가서(GPL) 버전 2에 클래스패스 예외 조항을 더한 라이선스 하에 공개되어 있어, 자유롭게 사용, 수정, 배포가 가능하다.
JVM은 단순한 인터프리터를 넘어서 성능 최적화를 위한 다양한 기술을 통합한다. 대표적으로 JIT 컴파일 기술을 사용하여 자주 실행되는 바이트코드 부분을 해당 플랫폼의 네이티브 기계어로 실시간 컴파일하여 실행 속도를 크게 향상시킨다. 또한 가비지 컬렉션을 통해 개발자가 명시적으로 메모리를 관리하지 않아도 되게 하여 메모리 안전성을 제공하고, 엄격한 바이트코드 검증 과정을 거쳐 보안을 강화한다.
JVM의 생태계는 자바 언어 자체를 넘어서 확장되었다. 코틀린, 스칼라, 클로저 같은 JVM 언어들은 JVM 위에서 실행되도록 설계되어 자바의 풍부한 라이브러리와 성숙한 도구 생태계의 혜택을 받으면서도 각 언어만의 장점을 제공한다. 이로 인해 JVM은 다양한 언어를 수용하는 범용 런타임 시스템으로서의 위상을 갖게 되었다.
3.2. CPython (Python 인터프리터)
3.2. CPython (Python 인터프리터)
CPython은 파이썬 프로그래밍 언어의 참조 구현체이자 가장 널리 사용되는 바이트코드 인터프리터이다. CPython이라는 이름은 구현 언어가 C (프로그래밍 언어)임을 의미한다. CPython은 파이썬 소스 코드를 바이트코드로 컴파일한 후, 내장된 가상 머신에서 이 바이트코드를 해석하여 실행하는 방식으로 동작한다. 이 과정은 자바 가상 머신의 동작 방식과 유사한 원리를 공유한다.
CPython의 핵심 구성 요소는 파이썬 인터프리터 엔진과 대규모 표준 라이브러리이다. 인터프리터는 메모리 관리를 위한 가비지 컬렉션 기능과 동적 타입 시스템을 내장하고 있다. CPython은 GIL이라는 독특한 설계를 채택하고 있어, 단일 프로세스 내에서의 멀티스레딩 성능에 제약이 있을 수 있다. 이러한 특성은 병렬 처리가 필요한 작업에서는 멀티프로세싱이나 다른 파이썬 구현체를 고려하게 만드는 요인이 된다.
CPython은 오픈 소스 소프트웨어이며, 파이썬 소프트웨어 재단이 관리하는 PSF 라이선스에 따라 배포된다. 이 라이선스는 BSD 라이선스와 호환되는 매우 허용적인 라이선스로, 상업적 이용, 수정, 재배포에 제한이 거의 없다. CPython의 개발은 공개된 버전 관리 시스템을 통해 이루어지며, 전 세계의 수많은 개발자가 기여하는 커뮤니티 기반 개발 모델을 따른다.
CPython의 바이트코드 인터프리터 방식은 플랫폼 독립성을 제공하는 주요 장점이 있다. 동일한 파이썬 소스 코드는 리눅스, 윈도우, macOS 등 서로 다른 운영체제에서 CPython을 통해 수정 없이 실행될 수 있다. 그러나 바이트코드를 해석하여 실행하는 방식은 일반적으로 네이티브 코드를 직접 실행하는 것보다 실행 속도가 느리다는 단점이 있다. 이를 극복하기 위해 JIT 컴파일 기술을 도입한 PyPy 같은 대체 구현체도 존재한다.
3.3. .NET CLR (Common Language Runtime)
3.3. .NET CLR (Common Language Runtime)
.NET 공용 언어 런타임(CLR)은 마이크로소프트가 개발한 가상 머신 및 실행 환경으로, .NET 프레임워크와 .NET Core를 포함한 .NET 플랫폼의 핵심 구성 요소이다. CLR은 C샵이나 VB.NET과 같은 .NET 언어로 작성된 소스 코드를 중간 언어로 컴파일하고, 이 중간 언어를 실행 시점에 해석하거나 JIT 컴파일을 통해 네이티브 코드로 변환하여 실행한다. 이를 통해 개발자는 특정 운영 체제나 하드웨어 아키텍처에 종속되지 않는 애플리케이션을 작성할 수 있다.
CLR의 라이선스는 역사적으로 마이크로소프트의 독점 라이선스 하에 있었으나, 오픈 소스화의 흐름에 따라 변화해왔다. 전통적인 .NET 프레임워크는 마이크로소프트의 상용 소프트웨어 라이선스로 제공되었다. 그러나 .NET Core가 출시되면서 상황이 바뀌었으며, 현재 .NET 플랫폼의 최신 구현체인 .NET 5 이상은 대부분의 구성 요소가 오픈 소스로 개발되고 있다.
CLR의 핵심 런타임 및 관련 라이브러리들은 현재 MIT 라이선스 또는 유사한 허용적 오픈 소스 라이선스 하에 공개되어 있다. 이는 상업적 사용, 수정, 재배포에 제한이 거의 없음을 의미한다. 예를 들어, CoreCLR이라고 불리는 .NET Core의 런타임 구현은 GitHub에서 MIT 라이선스로 공개되어 있으며, 누구나 소스 코드를 검토, 수정, 배포할 수 있다.
이러한 오픈 소스 전략은 리눅스나 macOS와 같은 비윈도우 플랫폼에서의 .NET 지원을 강화하고, 개발자 커뮤니티의 기여를 유도하는 데 기여했다. 결과적으로 CLR은 이제 크로스 플랫폼 애플리케이션 개발을 위한 주요 바이트코드 인터프리터 및 실행 환경 중 하나로 자리 잡았다.
3.4. Lua 인터프리터
3.4. Lua 인터프리터
Lua 인터프리터는 Lua 프로그래밍 언어의 공식 구현체로, 가볍고 빠른 바이트코드 인터프리터로 설계되었다. 이 인터프리터는 Lua 소스 코드를 Lua 가상 머신이 실행할 수 있는 바이트코드로 컴파일한 후 해석하여 실행하는 방식으로 동작한다. 이러한 설계 덕분에 Lua는 임베디드 시스템이나 게임 엔진, 스크립트 언어로 널리 사용되며, 특히 C 및 C++와의 쉬운 통합이 가능하다는 점이 큰 장점이다.
Lua 인터프리터의 핵심은 Lua 가상 머신이다. 이 가상 머신은 레지스터 기반의 가상 머신으로, 스택 기반 가상 머신에 비해 일반적으로 더 효율적인 명령어 처리가 가능하다고 알려져 있다. Lua 인터프리터는 소스 코드를 바이트코드로 변환하는 컴파일러와, 이 바이트코드를 실행하는 가상 머신으로 구성되어 있으며, 전체 시스템이 단일 C 라이브러리로 제공되어 호스트 애플리케이션에 쉽게 내장될 수 있다.
Lua 인터프리터는 매우 허용적인 MIT 라이선스 하에 배포된다. 이 라이선스는 상업적 사용, 수정, 배포, 사유 소프트웨어에의 통합을 거의 제한 없이 허용한다. 사용자는 소스 코드를 공개할 의무가 없으며, 라이선스 고지문만 유지하면 된다. 이러한 자유로운 라이선스 정책은 Lua가 다양한 상용 소프트웨어와 오픈 소스 프로젝트에서 광범위하게 채택되는 주요 요인 중 하나이다.
Lua 인터프리터의 구현은 간결성과 효율성에 중점을 두고 있다. 표준 라이브러리 역시 최소한의 핵심 기능만을 제공하며, 복잡한 기능은 별도의 라이브러리 모듈이나 호스트 애플리케이션이 확장하는 방식으로 설계되었다. 이로 인해 Lua 인터프리터 자체의 크기는 매우 작으며, 메모리 사용량이 적고 실행 속도가 빠르다는 특징을 가진다. 이러한 특성들은 Lua를 리소스 제약 환경에서 실행되는 스크립팅 언어로 매우 적합하게 만든다.
4. 라이선스 선택 시 고려 사항
4. 라이선스 선택 시 고려 사항
4.1. 상업적 사용
4.1. 상업적 사용
바이트코드 인터프리터를 상업적 목적으로 사용할 때는 해당 인터프리터의 라이선스 조건을 주의 깊게 검토해야 한다. 상업적 사용은 일반적으로 제품 판매, 서비스 제공, 내부 업무 자동화 등 금전적 이익을 목적으로 하는 모든 활용을 포함한다. 주요 바이트코드 인터프리터들은 각기 다른 라이선스 정책을 가지고 있어, 이를 준수하지 않을 경우 법적 분쟁과 금전적 손해를 초래할 수 있다.
예를 들어, 자바 가상 머신의 핵심 구현체인 OpenJDK는 GNU 일반 공중 사용 허가서 버전 2에 클래스패스 예외 조항을 더한 GPL 라이선스를 따른다. 이는 상업적 사용이 자유롭지만, OpenJDK 자체를 수정하여 재배포할 경우 수정된 소스 코드를 공개해야 하는 의무가 발생할 수 있다. 반면, 오라클이 제공하는 상용 자바 개발 키트는 별도의 상용 라이선스를 필요로 한다. 파이썬 인터프리터의 공식 구현체인 CPython은 파이썬 소프트웨어 재단 라이선스를 따르며, 이는 아파치 라이선스 2.0과 유사하게 상업적 사용, 수정, 배포에 매우 제한이 적은 퍼미시브 라이선스에 속한다.
.NET의 공용 언어 런타임은 역사적으로 복잡한 라이선스 구조를 가졌으나, 현재의 .NET Core 및 이후 버전은 대부분 MIT 라이선스나 아파치 라이선스 2.0과 같은 오픈 소스 라이선스로 제공되어 상업적 사용에 제약이 거의 없다. 한편, 루아 인터프리터는 매우 허용적인 MIT 라이선스를 사용하여, 소스 코드의 저작권 표시만 유지한다면 상업적 이용을 포함한 어떠한 방식으로도 자유롭게 사용할 수 있다. 따라서 기업은 프로젝트에 사용할 특정 바이트코드 인터프리터를 선택하기 전에, 공식 문서를 통해 정확한 라이선스 텍스트를 확인하고 필요한 경우 법무팀의 검수를 받는 것이 바람직하다.
4.2. 수정 및 배포 권한
4.2. 수정 및 배포 권한
바이트코드 인터프리터를 수정하거나 배포할 수 있는 권한은 해당 소프트웨어에 적용된 라이선스에 따라 크게 달라진다. 오픈 소스 라이선스는 일반적으로 소스 코드에 대한 접근과 수정을 허용하며, 수정된 버전의 재배포 조건을 명시한다. 반면, 상용 라이선스는 소스 코드의 수정을 제한하거나 금지하는 경우가 많으며, 배포 권한도 라이선스 계약에 따라 엄격히 규제된다.
수정 권한은 인터프리터의 내부 엔진을 개선하거나 특정 하드웨어 플랫폼에 최적화하는 작업과 직접적으로 연관된다. 예를 들어, GPL 라이선스를 따르는 인터프리터는 자유롭게 수정할 수 있지만, 수정본을 배포할 경우 전체 소스 코드를 공개해야 하는 카피레프트 조항을 준수해야 한다. 아파치 라이선스나 MIT 라이선스와 같은 허용적 라이선스는 수정본의 소스 코드 공개 의무를 부과하지 않아 상업적 활용에 더 유연하다.
배포 권한은 수정된 인터프리터나 이를 포함하는 응용 프로그램을 제삼자에게 제공할 수 있는지를 결정한다. 많은 상용 라이선스는 배포를 특정 사용자나 기업 내부로 제한하거나, 별도의 배포 계약 체결을 요구한다. 프리웨어나 셰어웨어 형태의 바이트코드 인터프리터는 무료로 배포는 가능하지만, 상업적 사용이나 수정에 제한이 있을 수 있다. 따라서 개발자는 프로젝트의 목적과 배포 방식을 고려하여 적절한 라이선스를 가진 인터프리터를 선택해야 한다.
4.3. 파생 저작물 공개 의무
4.3. 파생 저작물 공개 의무
파생 저작물 공개 의무는 오픈 소스 라이선스, 특히 카피레프트 라이선스를 선택할 때 가장 중요한 고려 사항 중 하나이다. 이 의무는 라이선스된 소프트웨어를 수정하거나 결합하여 새로운 소프트웨어를 만들고 배포할 경우, 그 결과물인 파생 저작물의 소스 코드도 동일한 라이선스 조건으로 공개해야 한다는 규정을 의미한다. 대표적인 카피레프트 라이선스로는 GNU 일반 공중 사용 허가서(GPL)가 있으며, 이는 자바 가상 머신의 일부 구현체나 GCC 컴파일러 등에 사용된다. 이러한 조항은 소프트웨어의 자유를 보장하고 공동체의 기여를 확산시키는 것을 목표로 한다.
반면, 퍼미시브 라이선스는 파생 저작물의 소스 코드 공개를 강제하지 않는다. 아파치 라이선스 2.0이나 MIT 허가서가 이에 해당하며, 파이썬 인터프리터인 CPython이 대표적인 예이다. 이러한 라이선스 하에서는 바이트코드 인터프리터를 수정하여 상용 제품에 내장하거나, 독점 소프트웨어와 결합하여 배포하더라도 자신의 소스 코드를 공개할 의무가 없다. 이는 기업이 자사의 지적 재산을 보호하면서도 오픈 소스 기술을 활용할 수 있는 길을 열어준다.
라이선스 선택은 프로젝트의 목표에 따라 달라진다. 순수한 오픈 소스 생태계 구축과 지식 공유를 우선한다면 카피레프트 라이선스가 적합할 수 있다. 그러나 상업적 제품 개발이나 다른 라이선스의 소프트웨어와의 통합이 주요 목표라면, 파생 저작물 공개 의무가 없는 퍼미시브 라이선스를 고려하는 것이 일반적이다. 특히 .NET 공용 언어 런타임(CLR)이나 루아 인터프리터와 같은 기술을 활용할 때는 각 구현체의 정확한 라이선스 조건을 확인하는 것이 필수적이다.
5. 라이선스 준수 및 법적 문제
5. 라이선스 준수 및 법적 문제
바이트코드 인터프리터를 사용하거나 포함하여 소프트웨어를 개발 및 배포할 때는 해당 인터프리터가 적용하는 라이선스를 정확히 준수해야 한다. 라이선스 위반은 저작권 침해에 해당할 수 있으며, 이는 법적 분쟁과 손해배상 청구로 이어질 수 있다. 특히 오픈 소스 라이선스 중 GPL과 같은 강력한 카피레프트 조항을 가진 라이선스는 주의가 필요하다. 만약 GPL 라이선스의 바이트코드 인터프리터를 수정하거나 링크하여 사용한다면, 그 결과물인 전체 응용 소프트웨어도 동일한 GPL 조건으로 소스 코드를 공개해야 할 의무가 발생할 수 있다.
상용 라이선스를 가진 인터프리터를 사용할 경우에는 라이선스 계약서에 명시된 사용 조건을 철저히 확인해야 한다. 이는 일반적으로 사용자 수, 서버 대수, 배포 권한, 수정 금지 조항 등에 대한 제한을 포함한다. 계약 조건을 위반하면 라이선스 계약이 해지될 뿐만 아니라 법적 책임을 질 수 있다. 또한, 프리웨어나 셰어웨어로 제공되는 인터프리터도 상업적 사용을 금지하거나 특정 기간 후에 유료로 전환되는 조건이 있을 수 있으므로 주의가 필요하다.
라이선스 준수를 위해서는 프로젝트 초기 단계부터 사용하려는 모든 타사 라이브러리와 실행 환경의 라이선스를 검토하는 것이 필수적이다. 여러 가지 라이선스가 혼합된 경우, 상호 간의 호환성 문제가 발생하지 않도록 주의해야 한다. 예를 들어, 상용 소프트웨어에 LGPL 라이선스의 인터프리터를 동적으로 링크하여 사용하는 것은 일반적으로 허용되지만, 정적 링크 시에는 추가적인 고려가 필요할 수 있다. 불확실한 경우 법률 전문가의 자문을 구하는 것이 바람직하다.
