entaPub — 어떤 EPUB도 안전하게, 끝까지 읽는다
망가진 책도, 오래된 방식으로 만든 책도, 악의적인 책도. entaPub는 EPUB를 안전하게 열고, 고칠 수 있는 곳은 고쳐서, 책의 모습을 지킨 채 독자에게 건네는 독서 엔진입니다.
열리지 않는 책을 없애고 싶다. EPUB는 전 세계에서 쓰이는 전자책 형식이지만, 실제로 유통되는 책 중에는 규격대로가 아닌 것, 중간에 망가진 것, 오래된 방식으로 만든 것이 적지 않습니다. entaPub는 그런 책도 가능한 한 열면서도 읽는 사람의 기기를 위험에 빠뜨리지 않는, Rust로 쓴 EPUB 읽기 엔진입니다.
특징#
망가져 있어도 읽을 수 있다
먼저 규격대로 엄격하게 읽고, 안 될 때만 XML 복구, HTML로 다시 읽기, 책 재구성으로 단계를 밟아 복구합니다.
무엇을 고쳤는지 알 수 있다
어느 단계에서 어떻게 고쳤는지를 확실성과 함께 진단으로 남깁니다. ‘어떻게든 표시됐다’로 끝내지 않습니다.
책을 여는 것만으로 외부와 통신하지 않는다
외부 CSS나 이미지를 읽으러 가지 않고, 책 안에 있는 것만으로 구성합니다.
실행할 수 있는 것은 제거한다
script·iframe·javascript: 등을 떼어 내고, 떼어 낸 사실을 기록합니다.
책 밖의 파일에 손대지 않는다
../ 나 절대 경로로 책 밖을 가리키는 참조는 받아들이지 않습니다.
너무 큰 책이라도 멈추지 않는다
파일 크기·압축 해제량·중첩 깊이·요소 수에 상한을 두어, 극단적인 책이라도 기기를 멈추게 하지 않습니다.
메모리 안전
Rust의 unsafe를 금지하고, AFL++ 퍼징으로 망가진 입력을 대량으로 시험하고 있습니다.
책의 모습을 그대로 전한다
방점·세로쓰기·들여쓰기는 본문의 일부입니다. 위험한 지정만 떼어 내고, 세로쓰기·루비·고정 레이아웃·펼침면을 지킵니다.
EPUB 2도 EPUB 3도
새로운 책도, 오래된 방식으로 만든 책도 같은 입구로 읽을 수 있습니다.
읽는 것과 만드는 것#
entaPub에는 같은 입력에서 반드시 같은 EPUB를 만들어 내는 ‘Builder’도 포함되어 있습니다. KuroEditor로 쓴 원고를 EPUB로 완성하는 것이 이 Builder, KuroViewer에서 책을 여는 것이 Reader입니다. 읽는 쪽과 만드는 쪽을 같은 생각으로 만들기 때문에 Entamy의 제품은 전자책을 처음부터 끝까지 직접 다룰 수 있습니다.
| 지원 형식 | EPUB 2 / EPUB 3(고정 레이아웃·세로쓰기·루비·펼침면) |
|---|---|
| 복구 | 엄격 → XML 복구 → HTML로 다시 읽기 → 책 재구성(각 단계를 진단으로 기록) |
| 안전성 | 외부 통신 없음·실행 요소 제거·책 밖 참조 거부·자원 상한 |
| 구현 | Rust(unsafe 금지)·AFL++ 퍼징 |
| 사용하는 제품 | KuroViewer(읽기)·KuroEditor(만들기) |
| 제공 형태 | Entamy 제품에 내장해 사용(오픈소스화는 미정) |
오픈소스로 공개하는 경우에는 Kuro License(MIT + 권리자 표기)로 공개할 예정입니다.
