惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
博客园_首页
Vercel News
Vercel News
WordPress大学
WordPress大学
美团技术团队
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 【当耐特】
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
腾讯CDC
M
MIT News - Artificial intelligence
爱范儿
爱范儿
Recent Announcements
Recent Announcements
雷峰网
雷峰网
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
Jina AI
Jina AI
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
P
Privacy & Cybersecurity Law Blog
Recorded Future
Recorded Future
Help Net Security
Help Net Security
N
News and Events Feed by Topic
博客园 - Franky
P
Proofpoint News Feed
L
LINUX DO - 热门话题
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
D
Docker
Google DeepMind News
Google DeepMind News
有赞技术团队
有赞技术团队
IT之家
IT之家
Security Latest
Security Latest
L
LangChain Blog
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
J
Java Code Geeks

Henri Sivonen’s pages

Parin vuoden tutkimattomuus crates.io: Rust Package Registry Asiakirjatonta toimintaa It’s not wrong that "🤦🏼‍♂️".length == 7 Koulutartuntojen tilastointimenettely Perusteasiakirjoja hallussapitämättä ikärajoitettu Asiantuntijat ja nukkuva vallan vahtikoira Koronapassilausunto Suppealla tietopohjalla ohimeneväksi väitetty Text Encoding Menu in 2021 The Text Encoding Submenu Is Gone An HTML5 Conformance Checker Not Part of the Technology Stack Browser Technology Stack Bogo-XML Declaration Returns to Gecko A Look at Encoding Detection and Encoding Menu Telemetry from Firefox 86 Why Supporting Unlabeled UTF-8 in HTML on the Web Would Be Problematic Rust Target Names Aren’t Passed to LLVM Toimintamalli Activating Browser Modes with Doctype Johtopäätöksiä mallin rakenteesta Tehtävänmäärittelyä kirjoittamatta ja kuolemia laskematta laumasuojamallinnettu Character Encoding Menu in 2014 Erillissuosituksen tarpeettomuudesta yleissuosituksen poikkeukseksi? STM:n maskiaikajana Rust 2021 Oma-aloitteisesti mallinnettu Kokopinovaatimuksin kilpailutettu chardetng: A More Compact Character Encoding Detector for the Legacy Web Varauksia paisutellen tiedotettu Perusteasiakirjoitta tiedotettu Always Use UTF-8 & Always Label Your HTML Saying So IME Smoke Testing The Validator.nu HTML Parser About the Hiragino Fonts with CSS It’s Time to Stop Adding New Features for Non-Unicode Execution Encodings in C++ Rust 2020 The Last of the Parsing Quirks About about:blank Rust 2019 a Web-Compatible Character Encoding Library in Rust How I Wrote a Modern C++ Library in Rust Using cargo-fuzz to Transfer Code Review of Simple Safe Code to Complex Code that Uses unsafe A Rust Crate that Also Quacks Like a Modern C++ Library #Rust2018 No Namespaces in JSON, Please A Lecture about HTML5 Julkisesti luotettu varmenne ikidomainille TLS:ää (SSL:ää) varten -webkit-HTML5 Lists in Attribute Values The Sad Story of PNG Gamma “Correction” If You Want Software Freedom on Phones, You Should Work on Firefox OS, Custom Hardware and Web App Self-Hostablility HTML5 Parser Improvements ARIA in HTML5 Integration: Document Conformance (Draft, Take Two) Schema.org and Pre-Existing Communities Lowering memory requirements by replacing Schematron HTML5 Parsing in Gecko: A Build Introducing SAX Tree NVDL Support in Validator.nu HOWTO Avoid Being Called a Bozo When Producing XML An Unofficial Q&A about the Discontinuation of the XHTML2 WG Thoughts on HTML5 Becoming a W3C Recommendation Four Finnish Banks Training Users to Give Banking Credentials to Another Site Unimpressed by Leopard Sergeant Semantics The Content Sink Inheritance Diagram – 2006-06-30 What is EME? About Points and Pixels as Units The Performance Cost of the HTML Tree Builder Social Media Impression Management The spacer Element Is Gone Openmind 2006 Performance Mistake XHTML and Mobile Devices WebM-Enabled Browser Usage Share Exceeds H.264-Enabled Browser Usage Share on Desktop (in StatCounter Numbers) HTML5 Parser-Based View Source Syntax Highlighting Vendor Prefixes Are Hurting the Web Accept-Charset Is No More Dualroids Writing Structural Stylable Document in Mozilla Editor ISO-8859-15 on haitallinen Hourglass The Scientific Method According to Hixie Maemo Source Code Karpelan lukkovertaus ontuu Digitaalisesta arkistoinnista ARIA in HTML5 Integration: Document Conformance (Draft) XHTML—What’s the Point? (Draft, incomplete) Mac OS X Browser Comparison HOWTO Spot a Wannabe Web Standards Advocate An Idea About Intermediate Language Trees and Web UI Generation Thoughts on Using SSL/TLS Certificates as the Solution to Phishing Bureaucracy Meets the Web Europe Day HOWTO Establish a 100% Literacy Rate What to Do with All These Photos? Charmod Norm Checking Validator Web Service Interface Ideas DTDs Don’t Work on the Web EFFI’s Day in Court
Reality Distortion Fields
Henri Sivonen · 2011-12-22 · via Henri Sivonen’s pages

Joel Spolsky wrote an article about the IE8 engine modes. The article starts with good and insightful general technology strategy wisdom and then proceeds to make bad specific conclusions.

The Insightful Part

The general compatibility strategy treatment in the article with the example of Martian plugs is very good. Everyone who works on Web specs needs understand compatibility and network effects. Joel has a history of being insightful on applications of microeconomic theories to software—particularly the network effects of complements.

Drawing the Wrong Conclusions

After the insightful general part, the article proceeds to make two mistaken assumptions along these lines:

  1. IE is the primary and necessary DHTML/Ajax/Web 2.0 development platform.

  2. Standards are written by idealists who don’t understand economics, business or compatibility strategy.

Platform

I live in one kind of reality distortion field—where people don’t use or need IE. I, my girlfriend, my parents, my grandfather and most of my friends from university use either Mac OS X or Ubuntu (or both). Those friends (of computer science background or otherwise) who do run Windows tend to run Firefox or Opera—not IE.

Joel seems to live in another kind of reality distortion field—where “98% of the world will install IE8”. (It’s a “high as a kite” kind of reality distortion field.)

Joel seems to be assuming a world where the way IE 5 through 7 behave is the only serious DHTML/Ajax platform around. That is, the conclusions he draws after presenting the general technology strategy insightfully are based on the assumption that IE is the platform and the Web standards aren’t. After the IE dungeon time, this is no longer the reality against which conclusions should be drawn. In reality there’s another serious DHTML/Ajax platform—the standards-based one implemented in Gecko, WebKit and Opera. The fact that people like me and people around me can live in the Gecko/WebKit/Opera reality distortion field shows that the IE part of the reality is today much less important than the Martian mindset of Microsoft apologists assumes.

So the current platform situation is that there’s the standards-based multi-vendor platform and there’s IE. From the Web app developer point of view these overlap to a great extent—the problems are the divergent bits. Web 2.0 apps run on both platforms. You don’t need the old IE runtime to participate on the Web (the Boeing intranet and Windows help files you burned on a CD-ROM in 1998 are not part of the Web). The argument Joel puts forward assumes that IE is the preferred and necessary development platform. And that’s where the conclusion goes wrong.

Today, the standards-based multi-vendor platform implemented by Gecko, WebKit and Opera not only works for Web users but is the preferred platform for developers. IE is a legacy platform that gets the backport. When Microsoft tries to bring the next IE closer to the standards-based multi-vendor platform, the breakage isn’t caused by defects in the standards-based multi-vendor platform—after all, Gecko, WebKit and Opera work with real sites and Web apps. The problem is that sniffed IEness is tainted by the old IE platform.

Where can we find a case study of addressing this issue successfully before? The answer is the default browser of Mac OS X.

Mac OS X used to have a default browser that used the Tasman engine. Then the browser based on that engine was discontinued and Mac OS X got a default browser that uses the WebKit engine. Different engines, successfull transition. How did that happen?

First, there are things that are not relevant:

  1. It is not relevant that the engines came from different companies in the Mac OS X case.

  2. It also isn’t relevant that the browsers had different UI brand names (although it did help with user expectation management).

  3. The reason why Mac OS X changed browser engines is not relevant.

The relevant parts are:

  1. The new browser did not report its UA string as a new version of the old one. Instead, it spoofed itself as an unrelated browser it was more compatible with (Mozilla).

  2. The old browser was kept as an optional install for a few years.

So emulating the Safari success would involve giving IE8 a new UA string identity, making document.all evaluate to false as an if condition, and keeping the old Intranet Explorer as an optional side-by-side install for a few years.

Standards

The other mistake Joel makes is assuming that standards are necessarily written by idealists who don’t understand market realities or well-known compatibility strategies or who think it is more expensive to change the spec than to change shipped software.

Indeed, there are examples of utter disdain for well-known compatibility and network effect leveraging strategies in the Web standard space. Consider, for example, what happens in legacy text/html browsers when XHTML+SVG documents served as application/xhtml+xml.

It doesn’t have to be that way, though. Specs can be written to codify behavior that is compatible with existing software products. This is how the parts of HTML5 that deal with existing functionality are defined.

Furthermore, specs can be written to describe well-defined behavior with all inputs. Draconian failure on error is not the answer to the problems of Postel’s law. Draconian error handling creates an unstable equilibrium in Game Theory terms—it only lasts until one player breaks the rule. One non-Draconian XML5 implementation in a key client product and the Draconian XML ranks would break. Well-specified error recovery is the right way to implement the liberal part of Postel’s law. This is how CSS and the HTML5 parsing algorithm are defined.