Kindle 电子书格式进化史

by wzyboy on

Amazon Kindle 至今已有十年历史了,它所支持的电子书格式也发生了许多有趣的变化。

一、起源:MOBI

MOBI 是 MobiPocket Reader 专门的格式。MobiPocket Reader 是 MobiPocket 公司出品的电子书阅读器。MobiPocket 公司成立于 2000 年,于 2005 年被 Amazon 收购,2007 年 Amazon 推出第一代 Kindle。可以说 Amazon 是在 MobiPocket 的技术积累上进军电子书市场的。如今 MobiPocket 的网站早就已经下线(Internet Archive),但 MobiPocket 对 Kindle 系列的影响十年之后仍未完全消失。

MOBI 的封装容器是 PalmOS 上数据库 PDB。PalmOS 使用 PDB 来存储程序、文档、图片等各种数据,MOBI 是类型为 BOOKMOBI 的 PDB。如今 PalmOS 早已消亡,但是 PDB 却借着 MOBI 一直活了下来。

初代的 Amazon Kindle 的电子书格式便是轻微修改过的 MOBI。Amazon 在原始 MOBI 的基础上加上了 DRM,并且把扩展名从 .mobi 换成 .azw,作为了初代 Kindle 的电子书格式(对于 DRM-free 的书籍来说,.azw 和 .mobi 是一模一样的)。也有人这把这一格式叫做 KF7 或 MOBI7,但这都是在 KF8(见下)出现之后的叫法,属于返璞词

由于 MOBI 实在过于老旧,现在除了非常老的 Kindle 型号,不会再有新 Kindle 从 Amazon 下载到这一格式了。

二、ePub 的凝视:KF8

由于种种原因,Kindle 从未支持过 ePub 这一开放格式,但 Amazon 在 2011 年推出了 KF8 格式,把 ePub 3 支持的许多功能搬了过来。KF8 的全称是 Kindle Format 8

相比古老的 MOBI,KF8 带来了很多新功能:

  • HTML5 和 CSS3 支持;
  • 表格:不再需要像 MOBI 那样把表格做成图片插入了;
  • 内嵌字体:不再需要像 MOBI 为了显示生僻字而插入一张巨大而丑陋的 JPEG 了;
  • SVG:可以插入了矢量图片了,对于工具类图书很有用;
  • 目录:MOBI 是没有真正的目录的,只能通过在书末模拟一个目录出来;
  • 竖排:受益最大的是 Amazon.co.jp,因为日本的纸质书籍保留了竖排的传统,Kindle 支持竖排使它更像纸书了。

KF8 的本质是用 PDB 封装 ePub,所以上面的这些新功能大部分都是 ePub 3 的功能。如上一节所说,MOBI 的本质是一个 PDB,而 KF8 则是把 ePub 的内容塞进 PDB 这一容器里。使用 Amazon 官方工具 KindleGen 生成的 KF8 文件其实是一个带有两本书的 PDB 文件,前面是一个 MOBI,后面才是真正的 KF8。但是支持 KF8 的设备从 Amazon 服务器上下载电子书时,则会得到一个只有 KF8 的瘦身版本。不过就算是这样的瘦身版本,文件头还是有一个空的 MOBI,以保证向后兼容性。这种做法让我想起了 MBR 与 GPT,后者会分区表头部放一个 protective MBR,供不认识 GPT 只认识 MBR 的程序读取。也是因为这一特性,也有程序(如 KindleUnpack)把 KF8 称为 MOBI8,但其实 KF8 的核心来自于 ePub。

KF8 文件名的标准扩展名是 .azw3,与 MOBI 的 .mobi 或 .azw 有所不同。但由于 KF8 依然使用 PDB 封装,并且文件头和 MOBI 一样也是 BOOKMOBI,所以 file 命令目前无法区分 MOBI 和 KF8。

2011 年之后的 Kindle 设备都支持 KF8,因此 KF8 也是目前使用最广的格式。

三、从头开始:KFX

KF8 为 Kindle 带来了 ePub 3 的不少功能,但 Amazon 并不满足于此,而是于 2015 年又推出了 KFX 格式。考虑到 KF8 全称是 Kindle Format 8,那 KFX 估计就是 Kindle Format X 了,至于其中的「X」是拉丁字母 X 还是罗马数字 10,就不得而知了。

如果说 KF8 是 Amazon 在旧格式 MOBI 和开放格式 ePub 之间的妥协,那 KFX 就是完全的新东西了。目前人们对 KFX 了解甚少,只知道它的数据结构基于 Amazon Ion,一种二进制的类 JSON。

目测观测到这些功能只有 KFX 里有:

  • 智能断行:为行末显示不下的单词按语言习惯添加连字符并断行,比如对于英语来说,reading 会被断成 read-ing 而不是 rea-ding 或是 readi-ng 之类的。这对像德语这样单词普遍比较的语言来说尤为有用。不过我也遇到过将 livingroom 断成了 livin-groom 的尴尬情况
  • Page Flip:不知道为什么,快速翻书的功能只有在 KFX 里能使用。
  • 天城文:目前 Amazon.in 上印地语、泰米尔语等使用天城文的语言的书籍,只有 KFX 格式。

KFX 不再像 KF8 那样考虑向后兼容了,而是完全从头开始。KFX 是随着 Kindle Paperwhite 3 一起推出的,之后 Kindle Paperwhite 2 也通过固件更新获得了支持,但是更老的设备就不支持 KFX 了。

KFX 的扩展名为 .kfx,但根据 MobileRead 论坛上的讨论,从 Amazon 获取到的 KFX 电子书是「散装」的,即 .kfx 本身只包含文字内容,图片等资源是在另外的文件里,并且高度优化过的。高度优化是指,如果你使用一台电子墨水的 Kindle 设备下载这本书,那你下载到的图片是灰度处理过的(节省带宽和体积)。KFX 这种设计让 calibre 用户产生了忧虑:即使没有 DRM,我得到的书也只是针对我的设备优化过的版本,而不是「完美」的版本。我检查了我的 Kindle 中的 7 本 KFX 电子书,它们都不带图片,因此我无法验证这一点。

四、其他格式

根据 MobileRead Wiki,Kindle 还使用过这些格式:

  • AZW1:Topaz 的马甲;
  • AZW4:用 PDB 封装的 PDF;
  • AZK:仅在 Kindle for iOS 上使用的格式,普遍认为是试验版本的 KFX。

这些格式使用得比较少,我也没有接触过实际的文件。