forked from kimminsung/dwg-dxf-viewer-sample
- acadrust-0.6.5-upgrade.md: what changed in dwg-wasm and why (failsafe reads, 32 MiB wasm memory growth, API changes), the field-level parse diff with each cause, cost (wasm size, load time) and what is left. - acadrust-0.6.5-upgrade-report.html: self-contained report with old/new captures of all 22 samples, zoomed checks of the formerly patched MESH and OLE2FRAME paths, and a diff image for each of the 5 changed views. - license-mpl2-acadrust.md / README: the obligation is now license text plus source location; records why the 0.4.1 notice was wrong. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
90 lines
5.1 KiB
Markdown
90 lines
5.1 KiB
Markdown
# acadrust MPL-2.0 — 의무 사항과 조치 내역
|
||
|
||
| 항목 | 내용 |
|
||
|------|------|
|
||
| 작성 목적 | 파서(acadrust, MPL-2.0)를 담은 wasm 을 공개 배포하면서 지켜야 할 의무를 확정하고 조치 내역 기록 |
|
||
| 대상 배포물 | `https://dwg-dxf-viewer-sample.pages.dev/` (Cloudflare Pages, **공개**) |
|
||
| 최초 검토 | 2026-08-04 (0.4.1 + 로컬 패치) |
|
||
| 갱신 | 2026-10-19 — **acadrust 0.6.5 무수정으로 교체**, 로컬 패치 폐기 |
|
||
| 상태 | 소스 트리 조치 완료. **배포본(dist2 / pages.dev)은 재빌드·재배포 전까지 옛 고지** |
|
||
|
||
---
|
||
|
||
## 0. 결론
|
||
|
||
1. **acadrust 를 0.6.5 (crates.io) 무수정으로 쓴다.** 로컬 패치가 필요 없어졌으므로
|
||
"수정본 소스 공개" 의무가 없다. 남는 의무는 MPL 원문 동봉 + 고지 + 소스 위치 안내뿐이다.
|
||
2. **우리 래퍼 `dwg-wasm` 은 MIT** (MPL 은 파일 단위라 번지지 않는다).
|
||
0.6.5 대응으로 고친 곳(할당자, failsafe, API 변경)은 전부 이 래퍼 안이다.
|
||
3. **upstream PR 의무는 없다.**
|
||
|
||
## 1. 무엇이 MPL 이고 무엇이 우리 것인가
|
||
|
||
| 코드 | 위치 | 라이선스 | 수정 여부 |
|
||
|------|------|----------|-----------|
|
||
| **acadrust 0.6.5** (DWG 파서 본체) | crates.io, `dwg-wasm/Cargo.toml` 에서 `=0.6.5` 고정 | **MPL-2.0** | **무수정** |
|
||
| dwg-wasm (wasm-bindgen 래퍼 + JSON 직렬화) | `hmwebviewer/rust/dwg-wasm/` | MIT (우리 코드) | 수정함 |
|
||
| Viewer2D 외 프론트엔드 | `src/` | MIT | — |
|
||
|
||
## 2. 0.4.1 시절 고지가 틀렸던 이유 (2026-10-19 확인)
|
||
|
||
2026-08-04 고지는 "한 파일만 수정"이라고 했지만, 실제 vendored 0.4.1 은
|
||
**2파일 3건**이 원본과 달랐다 (`hmwebviewer` `feat/subdmesh-render` 브랜치 기준).
|
||
|
||
| 파일 | 수정 |
|
||
|---|---|
|
||
| `object_reader/entities.rs` | `read_mesh` 배열 개수를 남은 비트로 제한 (대형 SubD 메쉬 손상 수정) |
|
||
| `object_reader/entities.rs` | OLE2FRAME 네 모서리 좌표를 데이터 헤더에서 추출 |
|
||
| `dwg_document_builder.rs` | 그 좌표를 엔티티에 대입 |
|
||
|
||
공개했던 `acadrust-0.4.1-read_mesh.patch` 는 원본이 아니라 OLE 중간 수정본을 기준으로
|
||
만들어져서, 원본 0.4.1 에 `git apply` 하면 `entities.rs:2350` 에서 실패했다.
|
||
즉 배포된 wasm 의 소스를 재현할 수 없었다 → MPL §3.2(a) 미충족.
|
||
|
||
## 3. 0.6.5 가 두 수정을 대체하는 근거
|
||
|
||
같은 도면을 네이티브 프로브로 읽어 비교했다 (2026-10-19).
|
||
|
||
| 샘플 | 원본 0.4.1 | 우리 패치본 | 0.6.5 무수정 |
|
||
|---|---|---|---|
|
||
| 대산당진 노면 MESH#1 | verts 100000 / faces 14 (손상) | 105497 / 185444 / 290931 | **105497 / 185444 / 290931** |
|
||
| C0060203 OLE2FRAME 좌표 | (1,1,0)/(0,0,0) 기본값 | (20584.21, 25712.29)–(39654.45, 13712.29) | **같음** |
|
||
|
||
업그레이드에 따른 래퍼 변경과 회귀 결과는 [`acadrust-0.6.5-upgrade.md`](./acadrust-0.6.5-upgrade.md).
|
||
|
||
## 4. 적용되는 조항 (무수정 사용 기준)
|
||
|
||
| 조항 | 요구 | 조치 |
|
||
|------|------|------|
|
||
| §3.2(a)(b) | Executable Form 배포 시 소스를 MPL 로 제공하고 수령자에게 입수 방법을 알릴 것 | 고지에 crates.io 다운로드 URL·커밋·SHA-256 명시 |
|
||
| §3.1 / §3.4 | 라이선스 사본 동봉, 고지 제거 금지 | `public/licenses/acadrust-MPL-2.0.txt` (0.6.5 `LICENSE` 와 동일 확인) |
|
||
| §3.3 | Larger Work(우리 앱)는 다른 라이선스 가능 | dwg-wasm·Viewer2D 는 MIT |
|
||
|
||
crates.io 는 게시된 버전을 삭제하지 않는다(yank 해도 다운로드 가능). 그래서 정확한 버전
|
||
링크를 소스 입수 경로로 삼는다. FAQ 가 "링크만으로 충분"하다고 명시하지는 않으므로,
|
||
상용 납품처럼 더 확실해야 하는 배포에서는 `.crate` 파일(4.1MB)을 함께 두는 방안을 검토한다.
|
||
|
||
## 5. 배포물 구성
|
||
|
||
| 파일 | 배포 URL | 내용 |
|
||
|------|----------|------|
|
||
| `public/licenses/acadrust-MPL-2.0.txt` | `/licenses/acadrust-MPL-2.0.txt` | MPL-2.0 원문 |
|
||
| `public/licenses/THIRD-PARTY-NOTICES.md` | `/licenses/THIRD-PARTY-NOTICES.md` | 컴포넌트·버전·커밋·SHA-256·소스 입수 방법 |
|
||
|
||
`index.html` "Module recipe" 패널 하단에서 두 곳으로 링크한다 (§3.2(b) "reasonable manner").
|
||
옛 `acadrust-0.4.1-read_mesh.patch` 는 삭제했다.
|
||
|
||
## 6. 앞으로 지킬 것 (체크리스트)
|
||
|
||
- [ ] acadrust 를 고치지 않는다. 고쳐야 하면 fork 소스 전체를 공개 위치에 두고 고지를 "modified" 로 바꾼다
|
||
- [ ] acadrust 버전을 올리면 → 고지의 버전·커밋·SHA-256 갱신 (`Cargo.lock` checksum)
|
||
- [ ] 새 서드파티를 번들하면 → `THIRD-PARTY-NOTICES.md` 에 행 추가
|
||
- [ ] 배포 전 `/licenses/` 2개 파일이 실제로 서빙되는지 확인
|
||
- [ ] (미해결) wasm 에 컴파일되는 Rust 의존성(MIT/Apache/BSD 등)의 고지 생성 — `cargo about` 등
|
||
|
||
## 7. 참고
|
||
|
||
- MPL-2.0 원문: [`../public/licenses/acadrust-MPL-2.0.txt`](../public/licenses/acadrust-MPL-2.0.txt)
|
||
- FAQ: https://www.mozilla.org/MPL/2.0/FAQ/ (Q6 사내 사용, Q8 실행 파일 배포, Q17 "distribute" 의미)
|
||
- MESH 수정 경위: [`subdmesh-rendering.md`](./subdmesh-rendering.md)
|