# Third-party code in drawtape-engine

Checked 2026-10-25 from `Cargo.lock` and each crate's `Cargo.toml` `license` field in the cargo
registry (`cargo tree --target wasm32-unknown-unknown -e normal --features export`).
No GPL / LGPL / AGPL code. LibreDWG and libredwg-web are NOT used.

## acadrust 0.6.7 — MPL-2.0 (the DWG/DXF reader and the DXF writer)

- crates.io: https://crates.io/crates/acadrust/0.6.7 (pinned `=0.6.7` in Cargo.toml, checksum in Cargo.lock)
- source: https://github.com/hakanaktt/acadrust
- **Used unmodified** as a crates.io dependency; none of its files are copied into or changed in
  this repository. MPL-2.0 text: [LICENSE-MPL-2.0](LICENSE-MPL-2.0) (copied from the crate).
  MPL-2.0 is a file-level copyleft: anyone who receives the wasm can get the acadrust source at the
  link above; our own files are not affected.
- `default-features = false` (no `parallel`/rayon; no `serde`, no `import`).
- One build-time substitution: `[patch.crates-io] web-time` points to our own 60-line shim in
  `shims/web-time` (inert clock on wasm32, `std::time` on native). This replaces a *dependency* of
  acadrust, not acadrust itself, and removes wasm-bindgen/js-sys from the build (the wasm has no imports).

acadrust's THIRD_PARTY_NOTICES.md (reproduced as required):

> ## ACadSharp
>
> The DWG reader and writer include code ported and adapted from ACadSharp. The repository
> history's initial DWG support commit identifies the source classes explicitly, including
> `DwgStreamReaderBase`, `DwgLZ77AC21Decompressor`, `DwgFileHeaderWriterAC18`, and
> `DwgObjectWriter`. Their current Rust implementations are in `src/io/dwg`.
>
> Copyright (c) 2021 Albert Domenech
>
> MIT License
>
> Permission is hereby granted, free of charge, to any person obtaining a copy
> of this software and associated documentation files (the "Software"), to deal
> in the Software without restriction, including without limitation the rights
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> copies of the Software, and to permit persons to whom the Software is
> furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included in all
> copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> SOFTWARE.
>
> ## DWG Format References
>
> The Open Design Alliance (ODA) DWG specification is the primary published reference for
> the binary layouts documented by this project. Where the specification is incomplete or
> ambiguous, implementation details are checked against native DWG files produced by CAD
> applications. Source comments and regression tests identify the evidence used for each
> layout and behavior. ACadSharp remains the attributed origin of the existing reader and
> writer code described above.

## Crates compiled into the wasm (all permissive)

| crate | version | licence | source |
|---|---|---|---|
| acadrust | 0.6.7 | MPL-2.0 | https://github.com/hakanaktt/acadrust |
| adler2 | 2.0.1 | 0BSD OR MIT OR Apache-2.0 | https://github.com/oyvindln/adler2 |
| anyhow | 1.0.104 | MIT OR Apache-2.0 | https://github.com/dtolnay/anyhow |
| bitflags | 2.13.2 | MIT OR Apache-2.0 | https://github.com/bitflags/bitflags |
| byteorder | 1.5.0 | Unlicense OR MIT | https://github.com/BurntSushi/byteorder |
| cfg-if | 1.0.5 | MIT OR Apache-2.0 | https://github.com/rust-lang/cfg-if |
| crc32fast | 1.5.3 | MIT OR Apache-2.0 | https://github.com/srijs/rust-crc32fast |
| encoding_rs | 0.8.42 | (Apache-2.0 OR MIT) AND BSD-3-Clause | https://github.com/hsivonen/encoding_rs |
| equivalent | 1.0.3 | Apache-2.0 OR MIT | https://github.com/indexmap-rs/equivalent |
| flate2 | 1.1.10 | MIT OR Apache-2.0 | https://github.com/rust-lang/flate2-rs |
| foldhash | 0.2.0 | Zlib | https://github.com/orlp/foldhash |
| hashbrown | 0.17.1 | MIT OR Apache-2.0 | https://github.com/rust-lang/hashbrown |
| indexmap | 2.14.2 | Apache-2.0 OR MIT | https://github.com/indexmap-rs/indexmap |
| itoa | 1.0.18 | MIT OR Apache-2.0 | https://github.com/dtolnay/itoa |
| memchr | 2.8.3 | Unlicense OR MIT | https://github.com/BurntSushi/memchr |
| minimal-lexical | 0.2.1 | MIT/Apache-2.0 | https://github.com/Alexhuszagh/minimal-lexical |
| miniz_oxide | 0.9.1 | MIT OR Zlib OR Apache-2.0 | https://github.com/Frommi/miniz_oxide |
| nom | 7.1.3 | MIT | https://github.com/Geal/nom |
| oem_cp | 2.1.2 | MIT | https://github.com/tats-u/rust-oem-cp |
| once_cell | 1.21.4 | MIT OR Apache-2.0 | https://github.com/matklad/once_cell |
| phf / phf_shared | 0.11.3 | MIT | https://github.com/rust-phf/rust-phf |
| ryu | 1.0.23 | Apache-2.0 OR BSL-1.0 | https://github.com/dtolnay/ryu |
| scopeguard | 1.2.0 | MIT OR Apache-2.0 | https://github.com/bluss/scopeguard |
| simd-adler32 | 0.3.10 | MIT | https://github.com/mcountryman/simd-adler32 |
| siphasher | 1.0.4 | MIT OR Apache-2.0 | https://github.com/jedisct1/rust-siphash |
| thiserror | 2.0.21 | MIT OR Apache-2.0 | https://github.com/dtolnay/thiserror |
| web-time (our shim) | 1.1.0 | MIT OR Apache-2.0 (our own code, `shims/web-time`) | this repo |
| drawtape-geom | 0.1.0 | our own code (`geom/`) | this repo |
| Rust std/core/alloc | 1.92 | MIT OR Apache-2.0 | https://github.com/rust-lang/rust |

Build-time only (proc macros, not in the wasm): thiserror-impl 2.0.21, syn 3.0.9, quote 1.0.47,
proc-macro2 1.0.107, unicode-ident 1.0.27 ((MIT OR Apache-2.0) AND Unicode-3.0), multiversion_no_op 1.0.0
(Apache-2.0 OR MIT).

Site credits line suggestion: "DWG/DXF reading by acadrust (MPL-2.0, Hakan AK), a Rust port of
ACadSharp (MIT, Albert Domenech)."

## Not code, but used for knowledge

- Proxy-graphics record layout (`src/proxy.rs`) and the fit-point spline rule (`geom::interpolate_fit`)
  follow the ODA DWG specification and ezdxf's documentation/source (MIT) as references; no code was copied.

## Test-only tools (not shipped)

- ezdxf 1.4.2 (MIT, https://github.com/mozman/ezdxf) generates the known-truth DXFs
  (`../fixtures/gen/make_truth.py`), installed in a throw-away venv only.
