圖片創作於 Adobe Photoshop
常見的出版物格式#
正常人,包括你我,如果想寫 一本書 你會想用什麼工具?
你先別急著回答,先仔細想想可能碰到什麼問題,怎麼在最快的時間內寫好,怎麼瀏覽...
好了,我猜你多半說 Latex + PDF 或者 Word.
應該沒有誰瘋狂到上來就寫 markdown 然後轉 html 然後轉 xml 轉來轉去的吧.
畢竟為了保證你打印出來的格式正常,你也沒什麼可選的,你再想一下如果你想做一個網頁你能有多少種你知道的,你用過的技術棧?
是不是很驚訝,為什麼我們現在出一本書居然沒有別的可選項!
為什麼活到最後的是 PDF?#
1991 年 Adobe 的聯合創始人約翰沃諾克提出了使用這麼一個系統來讓文檔便於分發,當時如日中天的還是 Latex,DVI 以及 Unix 機器,Latex 我們都知道... 您拿到 .tex 文件離能成功打印出來還差十萬八千里... 所以他們想開創這麼一個格式來減輕終端用戶的心智負擔.
有一些讀者可能不太了解為什麼 Latex 輸了... 那麼我們以一個可愛的 80 年代的大學生阿偉為例,他想打印出來他的學長杰哥的論文用於閱讀.
然後他拿到了學長的.tex 文件,然後他需要第一步找到他學長用過的宏包.
(然後他發現有一個宏包是他學長自己寫的,存了源代碼的軟碟不知道弄哪兒去了...)
然後他花了九牛二虎之力在各個論壇翻箱倒櫃的找到了所有的宏包,然後發現.sty 壞了.
(他問他學長,他學長說他沒動過 .sty 文件...)
他發現他學長是使用的他學長大學實驗室獨家研製的一套 Latex 發行版,再引入了.sty 文件之後似乎對了...
然後他編譯這個 latex...
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
Error line 114514 !Text line contains an invalid character.
然後似乎是宏包更新版本了...
他大喊: "杰哥不要!"
所以 PDF 出現極大程度上緩解了上面這個問題.
PDF 最大的貢獻就是第一使用了 XML 進行排版,同時規定了圖像的格式,還提供了一系列的元信息,統一了字體集,以及使用強大的 PostScript 進行繪製可以做出很多很 fantasy 的效果.
那麼這麼好的東西究竟哪裡作惡了呢?
專利問題#
2008 年,Adobe 公司發布了 ISO32000-1 對於公共許可,製作,使用,發布 PDF 兼容應用所屬的專利以及技術文檔.
等等,這個玩意兒有專利!?
沒錯!
不但有專利,而且還是買斷制專利!
也就是說杰哥他們的貧窮的實驗室再也不能發布一款基於 PDF 技術製作的 PDF 發行版了,否則就會吃官司.
而且還有一個最大問題,就是他們所提供的技術參考實現... 居然依賴了專有技術!我的上帝!
字體專利#
為了解決當時位圖字體的狗牙在先進的激光打印機打印出來是更尖銳的狗牙的問題,Adobe 公司推出了 Type 1 和 Type 3 的字體格式,然後這種字體的輪廓數據被 Adobe 公司使用加密算法和密鑰保存下來,然後想打印光滑的字體嗎?請支付給 Adobe 公司高昂的許可授權費.
雖然 Adobe 公司的技術水平贼几把爛,剛一發布就被破解但是要是被他們看到你在用... 準備請律師吧,相信你的律師沒 Adobe 家的牛逼.
圖片專利#
Adobe 公司手裡的圖片專利多的你數不過來,無論是壓縮也好,格式也好,過濾器也好,解碼器也好,一不小心你就用了 Adobe 的技術處理了你的圖片... 一不小心就有得交授權費.
但這兩個專利還好,最要命的就是 PostScript 的專利了.
什麼是 PostScript, 微軟蘋果和 Adobe 的愛恨情仇.#
PostScript 這一個基於堆棧長得像 Forth 的解釋語言來自於 Adobe 最早的那一批人的想法,1978 年首次實現,然後隨著 Adobe 公司的勢力擴張,PostScript 甚至一度被塞到了每一個激光打印機.
有人會好奇為什麼打印個圖片都要一種編程語言?
因為隨著 Adobe 開始鼓捣他們的矢量字體,如何把矢量的數據轉換為位圖並打印下來成了必要 (這一步在圖形學裡我們普遍稱之為光柵化), Adobe 到 90 年代的絕大多數利潤都來自於這個 PostScript 的打印機固件,可見其影響力.
然後我們的蘋果和微軟都坐不住了,因為 Adobe 這麼搞有點心太黑了!
國共合作一致對外#
在 1980 年末為了抗議 Adobe 公司的流氓行為,蘋果開始開發 TrueType (也就是我們現在都還在用的.ttf) 格式的字體,微軟公司和蘋果公司 py 交易了一些技術,然後也獲得了 TrueType 的使用權,當即就把 TTF 當成了 Windows 的首要的字體格式.
我們的 GNU 和 FreeDesktop 也坐不住了#
你們都在這裡玩閉源玩專利?老子開源社區第一個不服!
然後他們就寫出了 FreeType, 然後被 Adobe 蘋果和微軟一起告了
(資本家合著都是一伙兒的)
直到 2010 年字體專利被解除,才允許 FreeType 再放出來。而且直到現在還阉割掉了部分仍然蘋果持有專利的字體微調功能,這也是為啥 Linux GUI 字體難看的原因之一,Windows 你別狡辩了,寫的爛就是寫的爛.
PostScript 究竟為什麼這麼爛#
但凡你對並行和並發有一定的了解,你肯定知道,最好別搞全局狀態...
PostScript 就是有隱藏全局狀態的語言,這個從你打開大 PDF 文件快速翻頁直接死機就看出來問題了...
PostScipt 不支持圖片的透明度 (問你 PDF 咋來的透明?那可是 Adobe 的專利)
PostScript 的隱含全局狀態造成任意一個不兼容引起的渲染錯誤的狀態會傳遞到所有後續的頁上...
這也就是說有一丁點不兼容你的整個文檔有可能整個沒法看.
哦忘了說了,除了 windows 是 GDI 的,其他的打印機驅動全部都是 PostScript... 也就是實質上出版物的事實標準被壟斷了.
2022 年了,其他人怎麼渲染的#
那有的人反應過來了,欸,我們前端現在這麼花里胡哨的,好像也沒你說的這些問題啊
(你試過拿打印機打印前端網頁嗎?不是截圖)
隨著前端的進步 HTML5 CSS 的後端日新月異,之前有 Google 的 Angle 和 Skia, 現在又更新的 Servo 更能充分的利用 GPU 去渲染,已經換了天了,而 PDF 呢?還在 PostScript 一點點解釋.
2022 年了,你從一個網頁切換到另一個完全沒有打開過的網頁也就頂多 1-3 秒,有緩存的基本就是毫秒級別,這已經形成了事實上的碾壓.
開放帶來進步,封閉必然落後#
壟斷只是一時的,當 Adobe 的專利都悉數到期之後,等待他的將是一個名為 Web 的龐然大物.