Files
dwg-dxf-viewer-sample/docs/license-mpl2-acadrust.md
T
minsungandClaude Opus 5.5 e51114dbfd docs: record the acadrust 0.6.5 upgrade with a capture comparison report
- 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>
2026-10-19 19:44:15 +09:00

90 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)