2 điểm bởi GN⁺ 1 ngày trước | 1 bình luận | Chia sẻ qua WhatsApp
  • 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”

    • Dù thích hay ghét Steve Jobs, quyết định không hỗ trợ Flash trên iPhone và thúc đẩy HTML5 đã đẩy nhanh đáng kể sự sụp đổ của Flash
    • Flash hồi còn được gọi là VideoWorks thì còn tốt hơn ;)
      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
    • Flash đến giờ vẫn là môi trường xuất bản dễ dùng nhất, không có đối thủ
      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

    • Tôi đã đọc khá nhiều sách bằng ứng dụng FBReader, và họ có công khai SDK để dùng trong ứng dụng khác
  • 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ông
    Cá 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

    • Đúng vậy, tôi cũng làm thế với mọi file. Các nhà xuất bản như Standard Ebooks cũng cung cấp bản tải kepub, và như giải thích ở đây thì Adobe reader cũng có vấn đề
      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

    • Bên ePub thì ai cũng biết rằng nhắm đến 3.1 hoặc 2 là lựa chọn hợp lý hơn nhiều
      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...

    • Không rõ bạn đã trực tiếp dùng PineNote chưa. Giá của nó là 400 USD, và được mô tả là “dành cho các nhà phát triển Linux có kiến thức sâu về hệ thống nhúng hoặc người có kinh nghiệm với mobile Linux”. Ngay cả firmware do cộng đồng cung cấp trong liên kết cũng đã hơn 1 năm không được cập nhật
      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
    • Màn hình e-ink 60Hz mã nguồn mở của người này cũng đáng xem: [video] https://www.youtube.com/watch?v=nHbA2-_qzH4
  • 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

    • Không rõ bạn đã thử bản beta chưa. Tôi muốn biết liệu nó có thực sự khá hơn không
  • Đ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

    • Dù vậy, nhìn tổng thể thì có lẽ vẫn tiết kiệm được khá nhiều thời gian. Chỉ tính riêng thời gian biên dịch, nếu kiểm tra lặp lại sớm hơn thì có thể đã lãng phí nhiều thời gian hơn nữa
      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-width thì phải xem là may mắn :-P
    Cá 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

    • Ngay cả trong môi trường trình duyệt web đích thì HTML/CSS còn chỉ vừa đủ hoạt động, nên tôi không hiểu sao lại có người nghĩ dùng thứ này cho sách là ý hay
      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
    • Chắc cũng giống như khi vẽ tranh mà vì kính của ai đó bị nứt nên phải tránh tô ở giữa để họ khỏi thấy méo. Hoặc cũng có thể nên bảo nhà sản xuất kính làm kính tốt hơn, và để nghệ sĩ làm nghệ thuật của mình
  • 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 thắc mắc không biết đó là bán đứt, hay là thuê ngoài
  • 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

    • Tôi hiểu là điều đó có nghĩa Kobo mới ra năm 2026 sẽ dùng phần mềm DRM Adobe bị kẹt ở năm 2013 cho các quy tắc CSS