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

5.1 KiB
Raw Blame History

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.

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. 참고