- Ngay cả EPUB không DRM đã vượt qua kiểm định cũng có thể bị Kobo xử lý là “corrupted”, và vấn đề không nằm ở lỗi định dạng tệp mà phát sinh từ khả năng tương thích của engine dựng nội dung
- epubcheck là công cụ kiểm định trên thực tế theo chuẩn để xác minh cấu trúc EPUB và mức độ tuân thủ quy tắc, nhưng nó không thể phát hiện cả những vấn đề của bộ phân tích cú pháp CSS cũ trong các renderer cụ thể
- Kobo sử dụng RMSDK, engine dựng sách điện tử độc quyền của Adobe, và engine này được xây dựng dựa trên EPUB2 rồi chỉ được cập nhật nhẹ cho EPUB3 chứ không được hiện đại hóa
- Nguyên nhân của sự cố là một dòng
max-width: min(150px, 30vw);, và đoạn CSS level 4 hợp lệ này không được RMSDK hỗ trợ, gây lỗi tải sách trong Adobe Digital Editions và Kobo
- Để kiểm tra khả năng tương thích với Kobo, chỉ dùng epubcheck là chưa đủ; cần thêm bước xác minh bằng cách mở thực tế trong Adobe Digital Editions
Vấn đề bắt đầu từ một EPUB đã vượt qua epubcheck
- Các công cụ của Adobe thường được dùng vì Creative Suite là chuẩn ngành hoặc vì thiếu lựa chọn thay thế, và vấn đề trong bài viết này bắt nguồn từ sự khó chịu với phần mềm Adobe
- Cuốn sách mới được phát hành dưới dạng tệp
EPUB không DRM cung cấp trực tiếp cho độc giả, và trước khi phát hành đã trải qua nhiều bước rồi vượt qua kiểm tra của epubcheck
epubcheck là công cụ tiêu chuẩn trên thực tế để xác nhận một sách điện tử được cấu trúc đúng, và để vượt qua thì manifest phải phản ánh đầy đủ mọi thành phần và hình ảnh trong sách
- Chỉ cần thứ tự các phần tử HTML không đúng hoặc lệch đôi chút khỏi quy tắc của International Digital Publishing Forum là việc kiểm định cũng sẽ thất bại
- Việc đạt 100% với
epubcheck không hề dễ với người mới, nhưng với người làm xuất bản nó gần giống một linter kiểu hoặc bộ test hình thức
- Kỳ vọng ban đầu là một cuốn sách vượt qua
epubcheck sẽ hoạt động ở bất kỳ trình đọc hay ứng dụng tương thích EPUB nào
Chỉ Kobo báo “corrupted”
- Cuốn sách mới đã vượt qua
epubcheck ruleset 3.3, nhưng một độc giả báo xuất hiện thông báo “corrupted”
- Để kiểm tra khả năng tương thích ngược, phiên bản EPUB2 cũng được cung cấp, nhưng tệp đó cũng gặp cùng vấn đề dù tuân thủ quy tắc hoàn toàn
- Độc giả đó cho biết sách không mở được trên nhiều thế hệ thiết bị Kobo
- Cùng một EPUB lại hoạt động bình thường trên các môi trường khác như Amazon Kindle, Apple Books và Thorium
- Kết quả điều tra cho thấy Kobo sử dụng RMSDK, engine dựng sách điện tử độc quyền của Adobe
Thu hẹp nguyên nhân về RMSDK và Adobe Digital Editions
- RMSDK là engine cốt lõi của Adobe Digital Editions, đồng thời cũng được dùng trên nhiều thiết bị Kobo và các thiết bị Sony·Nook đời cũ
- Engine này được tạo ra vào khoảng năm 2010 với trọng tâm là EPUB2, sau đó được cập nhật nhẹ cho EPUB3 nhưng không được hiện đại hóa
- Việc biết Kobo dùng RMSDK không ngay lập tức giải quyết được sự lệch nhau giữa kết quả của
epubcheck và Kobo, nhưng nó cho một hướng gỡ lỗi
- Khi đưa sách vào Adobe Digital Editions, đúng như dự đoán, việc tải đã thất bại và cũng không có thông báo lỗi nào xuất hiện
- Khi thử tải lại, chương trình báo rằng đây là cuốn sách đã được thêm nên không thể nhập lại, nhưng màn hình vẫn trắng trơn
- Sau đó, nhiều biến thể của tệp đã được tạo ra để thử nghiệm, và mọi biến thể đều tiếp tục vượt qua
epubcheck
- Đã thử sắp xếp lại cấu trúc thư mục, xóa metadata, xóa thuộc tính ngôn ngữ, tạo UUID mới, làm phẳng thư mục, đổi phần mở rộng, tạo lại ZIP và chỉnh sửa
manifest
- Bất chấp tất cả các thử nghiệm đó, Adobe Digital Editions vẫn tiếp tục thất bại khi tải
Nguyên nhân thực sự: một dòng CSS hợp lệ
- Khi vô hiệu hóa stylesheet, cuốn sách đột nhiên được tải, từ đó phạm vi vấn đề được thu hẹp về stylesheet
- Sau khi tạo thêm nhiều biến thể chỉ áp dụng một phần stylesheet, cuối cùng đã xác định được chính xác dòng gây ra sự cố
.copyright img {
max-width: min(150px, 30vw);
}
- Đoạn mã này là CSS level 4 hoàn toàn hợp lệ, nhưng RMSDK không hỗ trợ nó
- Khi thay bằng cách viết cũ hơn là
max-width: 150px;, cuốn sách mở bình thường trong Adobe Digital Editions
- Bộ phân tích cú pháp CSS của RMSDK về cơ bản đang mắc kẹt ở trạng thái khoảng năm 2013 và không hỗ trợ flexbox, grid, các hàm toán học hay thuộc tính tùy biến
- Khi gặp CSS mà nó không nhận ra, thay vì fallback hoặc báo lỗi rõ ràng, nó âm thầm sập
epubcheck có thực hiện kiểm tra CSS cơ bản, nhưng về bản chất không thể xác minh CSS theo các renderer cụ thể vốn đã hỏng hóc
Bài học về kiểm tra tương thích với Kobo
- Ngay cả đến năm 2026, khi Kobo vẫn dùng RMSDK làm nền tảng cho việc dựng sách, chỉ một dòng CSS hợp lệ cũng có thể biến cả một EPUB hợp lệ thành “corrupted file”
- Trong trường hợp này, Kobo không thể mở toàn bộ cuốn sách mà không đưa ra thông báo lỗi rõ ràng hay cơ chế fallback nào
- Để tránh vấn đề này, một phiên bản mới đã được phát hành và đã có biện pháp để độc giả không gặp lại cùng lỗi đó
- Trong một môi trường lý tưởng, RMSDK đáng lẽ phải thoát khỏi tình trạng CSS lỗi thời hoặc ít nhất cung cấp cơ chế xử lý lỗi, nhưng hiện tại vấn đề vẫn còn nguyên
- Để bảo đảm khả năng tương thích với Kobo, chỉ
epubcheck thôi là chưa đủ; cần kiểm tra xem sách có thực sự tải được trong Adobe Digital Editions hay không
- EPUB là một tiêu chuẩn mở tuyệt vời cho sách điện tử, nhưng nhiều triển khai lại bộc lộ những khiếm khuyết căn bản trong một cấu trúc ưu tiên kiểm soát truy cập
1 bình luận
Ý kiến trên Hacker News
Adobe cũng luôn như thế này. Họ đã tự làm mất thị phần khổng lồ của Flash, trong khi giải pháp chỉ là chi thêm vài triệu đô cho QA, và cuối cùng khiến mọi nhà sản xuất trình duyệt đồng thuận rằng “web sẽ tốt hơn nếu không phải đi cùng một đối tác không đáng tin như thế này”
Trước đây tôi từng phát hành vài thứ bằng Flash, và đó là một phần mềm kinh khủng đầy những lỗi kiểu Heisenbug: crash ngẫu nhiên, sửa ở một chỗ thì lại làm hỏng chức năng không liên quan ở mô-đun khác. Giá khoảng 800 đô, nhưng gần như không có hỗ trợ; tôi đã gửi nhiều bug có kèm cả test case thu gọn để dễ tái hiện, nhưng sau khi bản phát hành kế tiếp ra mắt thì chỉ nhận được thư trả lời tự động bảo rằng “có thể đã sửa rồi, hãy mua giấy phép giá đầy đủ để tự kiểm tra”
Cũng từng có MusicWorks, và cả hai đều chỉ dành cho Mac ở giai đoạn rất sớm. Chỉ kể đến đây thôi cũng lộ tuổi rồi
Cấu trúc chồng tầng của hệ thống build JavaScript và “chuẩn web” khó hơn rất nhiều so với việc chỉ vẽ gì đó, viết thêm vài hàm đơn giản, rồi tạo ra một file tĩnh có thể nhúng ở bất cứ đâu hoặc cho tải về. Muốn dùng thứ thay thế Flash thì tốn quá nhiều thời gian cho cấu hình, mà các “chuẩn” đó còn tệ hơn
Tôi ghét cả Steve Jobs vì đã giết Flash, và ghét cả Adobe vì quản lý tệ hại một trong những công nghệ ấn tượng nhất của web. Trẻ con lớn lên ngày nay không biết Flash từng kỳ diệu đến mức nào. Nó giống như Roblox hay Minecraft cho web vậy
Website đến giờ vẫn còn thua cả Flash đầu những năm 2000. Đã qua hàng chục năm mà chúng chỉ bắt chước được một phần sức mạnh của nó, còn độ dễ dùng thì vẫn chẳng theo kịp
Tôi đã định làm phần mềm đọc sách điện tử trong một thời gian khá dài, rồi cuối cùng nghĩ rằng thôi thì đành bán linh hồn cho quỷ và thử xây trên RMSDK
Nhưng hoàn toàn không có cách nào để tiếp cận. Không chỉ là phí bản quyền quá đắt với nhà phát triển độc lập, dù điều đó chắc cũng đúng, mà là chẳng có ai để nói chuyện cả. Email ghi trên website không bao giờ trả lời, thậm chí cũng không có lấy một câu “cảm ơn bạn đã quan tâm” hay “chúng tôi sẽ liên hệ lại”
Tôi có hỏi một đồng nghiệp từng làm ở đó về quy trình xin quyền truy cập RMSDK, nhưng anh ấy tìm trong tài liệu nội bộ mà cũng chẳng thấy gì. Tôi còn tìm trên LinkedIn những người có vẻ liên quan đến RMSDK để hỏi, nhưng kết quả cũng y như vậy
Trong khi đó, các nhà xuất bản phần lớn chỉ phân phối sách qua một trong các nhà cung cấp DRM nổi tiếng như Apple, Amazon hoặc Adobe, mà hai bên đầu thì hoàn toàn đóng kín. Nếu thế này còn chưa phải là độc quyền phản cạnh tranh thì tôi không biết gọi là gì nữa
Theo tôi biết, thiết bị Kobo dùng bộ máy kết xuất tốt hơn nếu đặt tên file là
.kepub.epub. Có vẻ nó dựa trên ePub 3, nhưng tôi không biết liệu có sửa được vấn đề ở đây khôngCá nhân tôi luôn chuyển ePub sang kepub bằng kepubify(https://pgaskin.net/kepubify/try/) trước khi đưa sang Kobo
https://standardebooks.org/help/how-to-use-our-ebooks#kobo-f...
Tôi thực sự rất thích Kobo Clara Colour, và nếu bỏ được Adobe reader thì có lẽ nó sẽ hoàn hảo. Tôi cũng đã thử KOReader, nhưng vì thích sách thư viện OverDrive và Kobo Store nên chưa chuyển hẳn sang nó
Đáng tiếc là epub và epubcheck không phải là chuẩn mực tuyệt vời, không gây tranh cãi như tác giả nói. Khi W3C, Inc. tiếp quản việc quản lý đặc tả vào khoảng ePub 3.1, họ đã tham chiếu nguyên xi WHATWG HTML và các đặc tả trình duyệt ngày càng phình to([1])
Những “chuẩn sống” như vậy không có quản lý phiên bản hay QA. Kết quả là vì dựa trên một phiên bản HTML đã định nghĩa lại header và sectioning, ePub 3.2 đã khiến các ePub cũ trở thành không còn tuân thủ chuẩn. Đó là lý do Calibre và các công cụ khác vẫn khuyên dùng 3.1, hoặc tốt hơn nữa là 2
Trường hợp hàm CSS
min()bị từ chối cũng cho thấy việc bê nguyên cả một đặc tả CSS quá phức tạp vào đây không giúp ích được bao nhiêu. Vì thiết bị đọc sách điện tử không phải là trình duyệt luôn được cập nhật lên bản mới nhất[1]: https://news.ycombinator.com/item?id=41326179
Với vấn đề tương thích EPUB, CSS luôn phải là nghi phạm số một. Dùng các tính năng CSS “hiện đại” rồi phàn nàn vì không có flexbox hay grid là kiểu tư duy của dân web
Việc EPUB và web dùng chung một phần stack không có nghĩa là hai thứ đó hoàn toàn trùng khớp, và cũng không cần phải như vậy. Hầu hết thiết bị đọc tích hợp màn hình mực điện tử không dùng trình duyệt để render, mà nhúng sẵn trong firmware một toolchain phân tích và kết xuất HTML/CSS chuyên dụng, rồi chỉ cập nhật rất hiếm khi. Nếu quan tâm thì có thể xem crengine của KOReader hoặc Crosspoint reader chạy trên ESP32
Bài blog đó có mùi văn phong AI quá tự tin, nhưng đừng để bị đánh lừa
Nếu ai đang tìm một thiết bị thì cũng có PineNote
https://pine64.org/devices/pinenote/
Đắt hơn và có ít phần mềm dùng được ngay hơn, nhưng về quyền sở hữu thiết bị và việc có thể chạy phần mềm nào thì thẳng thắn hơn nhiều và có ít ràng buộc hơn
Cũng có những bài viết tổng hợp khá tốt về trải nghiệm dùng PineNote
https://shom.dev/posts/20250308_pinenote-day-one/
https://shom.dev/posts/20250406_a-pinenote-only-5-day-weeken...
Kobo cũng không hề hạn chế những gì bạn có thể làm. Bạn có thể sideload phần mềm đọc sách điện tử thay thế như KOReader để cải thiện chức năng của trình đọc tích hợp
Kobo thực ra đang viết lại hoàn toàn phần mềm đọc sách điện tử, và ở EU có thể tải bản beta. Gần như chắc chắn nó không còn dựa trên RMSDK nữa
Adobe quản lý rất tệ, rồi sau đó còn làm hỏng quá trình chuyển đổi khi bán nó cho một bên thứ ba khiến người dùng cuối và các nền tảng càng bực mình hơn, gần như dâng cả thị trường DRM cho EPUB cho LCP trên đĩa bạc. Các nền tảng đang rời bỏ Adobe nhanh hơn bao giờ hết
Đoạn “Tôi sợ khoảnh khắc nhấn nút xác thực trên cuốn sách đã hoàn thành sau vài tháng làm việc. Nó luôn tìm ra thứ gì đó để bắt bẻ” làm tôi nhớ đến một học viên cao học suýt khóc khi cố biên dịch bản thảo bài báo LaTeX
Cậu ấy đã hiểu quá sát nghĩa câu “cứ viết trước rồi để định dạng tính sau”, đến mức mãi sát hạn mới lần đầu thử biên dịch
Không rõ thời hạn đang đến gần đã ảnh hưởng thế nào đến cảm nhận đó ;-P
Nếu người đọc ngay từ đầu đã dùng một trình đọc ePub hỗ trợ hoặc ít nhất là bỏ qua được những thứ như
max-widththì phải xem là may mắn :-PCá nhân tôi khi dùng trình đọc ePub, thỉnh thoảng phải tự sửa các tệp bị hỏng hoặc hiển thị kỳ quặc vì những style không cần thiết. Tôi cũng từng nghe rằng những tệp không có vấn đề gì ở phía tôi lại không thể đọc được với người khác, và nếu không phải là định dạng cầu kỳ thực sự cần thiết thì có lẽ tốt hơn nên giữ ở mức HTML cơ bản nhất, kiểu mà ngay cả IE4 cũng không render sai quá nhiều
Vì thế đôi khi tôi nghĩ đến việc một ngày nào đó sẽ làm một công cụ epub reconstruct để tái cấu trúc ePub thành HTML/CSS đơn giản nhất có thể. Lý tưởng nhất là phải cấu hình được để tối đa hóa khả năng tương thích
Tôi thường nghĩ giá mà có thể xác định một tập con chạy nhanh trên mọi máy tính rồi tôi chỉ dùng đúng phần đó cho các trang web mình làm. Nếu ai đó cũng xác định một phạm vi như vậy cho ePub thì nó sẽ hữu ích hơn nhiều
Adobe Digital Editions và RMSDK gần đây đã được bán cho Wipro Engineering: https://helpx.adobe.com/enterprise/kb/eol-faq-adobe-digital-...
Tôi hiểu sự bực bội của tác giả, nhưng có bao nhiêu độc giả thực sự đang dùng những trình đọc ePub cũ kỹ, không được nâng cấp hoặc không thể nâng cấp? Nếu tác giả muốn tác phẩm của mình đến được với mọi độc giả thì phải nhắm vào mẫu số chung thấp nhất
Nếu thứ đó là một cái gì đó từ năm 2013 thì đáng tiếc, nhưng đó là thực tế của thị trường