필수 사항
안정 크레이트의 공개 의존성은 안정적입니다 (C-STABLE)
크레이트의 모든 공개 의존성이 안정적이지 않으면 그 크레이트는 안정(>=1.0.0) 상태가 될 수 없습니다.
공개 의존성이란 현재 크레이트의 공개 API에서 그 타입이 사용되는 크레이트를 말합니다.
#![allow(unused)]
fn main() {
pub fn do_my_thing(arg: other_crate::TheirThing) { /* ... */ }
}
이 함수를 포함하는 크레이트는 other_crate도 안정적이지 않으면 안정 상태가 될 수 없습니다.
공개 의존성은 예상치 못한 곳에 슬며시 끼어들 수 있으므로 주의하십시오.
#![allow(unused)]
fn main() {
pub struct Error {
private: ErrorImpl,
}
enum ErrorImpl {
Io(io::Error),
// Should be okay even if other_crate isn't
// stable, because ErrorImpl is private.
Dep(other_crate::Error),
}
// Oh no! This puts other_crate into the public API
// of the current crate.
impl From<other_crate::Error> for Error {
fn from(err: other_crate::Error) -> Self {
Error { private: ErrorImpl::Dep(err) }
}
}
}
크레이트와 그 의존성은 허용적 라이선스를 가집니다 (C-PERMISSIVE)
Rust 프로젝트에서 만든 소프트웨어는 MIT 또는 Apache 2.0 라이선스 중 하나를 선택할 수 있는 이중 라이선스로 배포됩니다. Rust 생태계와 최대한의 호환성만 필요한 크레이트는 여기에 설명한 방식으로 똑같이 하는 것을 권장합니다. 다른 선택지는 아래에서 설명합니다.
이 API 가이드라인은 Rust 라이선스를 자세히 설명하지 않지만, Rust FAQ에 이에 관한 내용이 조금 있습니다. 이 가이드라인은 Rust와의 상호 운용성 문제를 다루며, 라이선스 선택지를 포괄적으로 다루지는 않습니다.
프로젝트에 Rust 라이선스를 적용하려면 Cargo.toml의 license 필드를 다음과 같이 정의하십시오.
[package]
name = "..."
version = "..."
authors = ["..."]
license = "MIT OR Apache-2.0"
그런 다음 저장소 루트에 라이선스 본문을 담은 LICENSE-APACHE 파일과 LICENSE-MIT 파일을 추가하십시오(라이선스 본문은 예를 들어 choosealicense.com에서 Apache-2.0과 MIT용으로 구할 수 있습니다).
그리고 README.md 끝부분에는 다음 내용을 추가하십시오.
## License
Licensed under either of
* Apache License, Version 2.0
([LICENSE-APACHE](LICENSE-APACHE) or <http://www.apache.org/licenses/LICENSE-2.0>)
* MIT license
([LICENSE-MIT](LICENSE-MIT) or <http://opensource.org/licenses/MIT>)
at your option.
## Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.
MIT/Apache-2.0 이중 라이선스 외에 Rust 크레이트 작성자가 흔히 사용하는 또 다른 라이선스 방식은 MIT나 BSD 같은 단일 허용적 라이선스를 적용하는 것입니다. 이 라이선스 방식은 Rust의 MIT 라이선스가 부과하는 최소한의 제약만 부과하므로 Rust의 라이선스와도 완전히 호환됩니다.
Rust와 완벽한 라이선스 호환성을 원하는 크레이트는 Apache 라이선스만 선택하는 것을 권장하지 않습니다. Apache 라이선스는 허용적 라이선스이기는 하지만 MIT 및 BSD 라이선스보다 더 많은 제약을 부과하므로 일부 상황에서는 사용을 꺼리게 하거나 사용할 수 없게 만들 수 있습니다. 따라서 Rust 런타임 스택 대부분은 사용할 수 있는 일부 상황에서도 Apache 단독 라이선스 소프트웨어는 사용할 수 없습니다.
크레이트 의존성의 라이선스는 크레이트 자체의 배포 제약에 영향을 줄 수 있으므로, 허용적 라이선스를 가진 크레이트는 일반적으로 허용적 라이선스를 가진 크레이트에만 의존해야 합니다.