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

推荐订阅源

Martin Fowler
Martin Fowler
L
LINUX DO - 最新话题
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
Know Your Adversary
Know Your Adversary
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
Lohrmann on Cybersecurity
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy & Cybersecurity Law Blog
K
Kaspersky official blog
The Last Watchdog
The Last Watchdog
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
WordPress大学
WordPress大学
L
LINUX DO - 热门话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
V
Visual Studio Blog
O
OpenAI News
AI
AI
Hacker News: Ask HN
Hacker News: Ask HN
V2EX - 技术
V2EX - 技术
GbyAI
GbyAI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Simon Willison's Weblog
Simon Willison's Weblog
S
Schneier on Security
Spread Privacy
Spread Privacy
Y
Y Combinator Blog
I
InfoQ
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
F
Fortinet All Blogs
C
CERT Recently Published Vulnerability Notes
T
The Blog of Author Tim Ferriss
C
Check Point Blog
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
N
News and Events Feed by Topic
Project Zero
Project Zero
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog
G
Google Developers Blog

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
Almost Precedent
Henri Sivonen · 2011-12-22 · via Henri Sivonen’s pages

In the wake of the blog reactions to IE engine version targeting, Eric Meyer blogged about the story behind the Almost Standards Mode in Gecko portraying it as precedent. I think engine version targeting and the almost standards mode are substantially different and, moreover, in hindsight we would have been better off without the Almost Standards Mode. Therefore, I think the history with the Almost Standards Mode shouldn’t be used as precedent that justifies engine version targeting.

I’ve Been There and Sympathize

In 2000, after Mac IE 5 was published with the doctype switch, I realized that Mac IE 5 had a way of triggering its standards mode for Transitional doctypes while the development versions of Mozilla didn’t. It seemed clear to me that the most cutting-edge Web authors would want trigger the standards mode in Netscape 6 in order to use CSS properly but would also want to use deprecated attributes in HTML in order to degrade gracefully in legacy browsers.

The conclusion I drew was that if Netscape shipped Mozilla as it were then, authors would use a Strict doctype with Transitional markup and this would make authors disrespect validation and that would have been just horrible. Therefore, I filed a bug suggesting that Mozilla adopt the same behavior with Transitional doctypes as Mac IE 5: quirks without system id and standards with system id. (I have since adjusted my views on validation.)

There was a problem though: Mozilla’s Standards mode (unlike Mac IE 5’s Standards mode) broke layouts that had image slices in table cells and there was one top site that used such a layout with a Transitional doctype with a system id. The site was apple.com. The Netscape Product Delivery Team didn’t want to break the Apple front page.

To make the long story short, this was the solution: Triggering the standards mode for HTML 4.01 Transitional with system id (like Mac IE 5) but (unlike Mac IE 5) not triggering it for the doctype used on the Apple front page at the time—HTML 4.0 Transitional. (The Wayback machine seems to edit the doctype.) And this is why the big doctype table has a weird quirky dent at HTML 4.0 Transitional with system id.

Two years later, when the Almost Standards Mode was introduced as recounted by Eric, the HTML 4.0 Transitional with system id case was not upgraded to Almost Standards Mode and continues to trigger the Quirks Mode in Gecko.

Developer.apple.com broke and was handled through upgrade evangelism.

So I’ve been there too, but I still think IE version targeting is different. Here’s why:

Gecko Modes and Trident Freezes are Different

In Gecko, WebKit and Presto, there’s a handful of conditional quirks. While WebKit and Presto have had to imitate Gecko quirks mode, the Gecko quirks are mostly documented and few enough not to create lock-in or impose undue burden on other implementors imitating the quirks.

Netscape 6 did not ship with a frozen Netscape 4 in it. And Netscape 7 didn’t ship with a frozen Netscape 6 in it. Having a few conditional quirks as a one-time solution is very, very different from adding a whole frozen engine in each major release.

Mode Switches are a Product of Their Time

Back when the Quirks Mode and the Almost Standards Mode were introduced, the way people thought about the relationship of existing content, Web developers, browsers and specifications was very different from what it is now.

Back then, committees created specs and that were enshrined as W3C Recommendations before there was solid implementation experience. Then the Web Standards Project lobbied browser-makers to implement the W3C specs as they were. The mindset was that the specs given from above couldn’t and shouldn’t change. People thought that vigorous upgrade evangelism would work and make Web authors change their existing sites.

The design principles that drive HTML5 today weren’t part of the mindset back then. For example, it didn’t occur to me back then that perhaps the specs should change to match the pre-existing implementation practice on comment parsing, the effect of <table> when a <p> is open and the parsing of unitless CSS lengths. (It did occur to me to question the Standards mode behavior of images in tables, though. It was and is so hard to explain with a straight face to friends who create Web sites.)

Things are now different from what they were in 2000 or 2002. For example, CSS2 has been reopened as CSS 2.1 that isn’t yet REC-worthy. The issue of images in tables was and continues to be much bigger a deal than the examples from the last paragraph. It doesn’t really matter if one thinks layout tables are good or bad. They are out there and that’s the way existing content is. In the light of today’s HTML5 design principles, CSS2 failed to Support Existing Content with its default behavior. And that’s a bug in CSS2.

Now, I do agree that the CSS2 behavior makes sense for laying out tabular textual data. To allow that behavior and to avoid breaking existing content, in hindsight, introducing a new engine mode wasn’t the best solution. It would have been better to make a CSS property for toggling table cell shrink-wrapping and making the property default to legacy-compatible behavior.

Given that the Almost Standards Mode is not the best solution that can be thought of today and that version targeting is substantially different from Gecko modes, I think the Almost Standards Mode should not be used as precedent justifying engine version targeting.

What Could Microsoft Do?

As I understand it, there are two major problems that IE faces when launching a better engine:

  1. Intranet apps written exclusively for old IE.

  2. Sites on the public Web assuming that IE is always has certain quirks.

David Baron suggested a way to address the first problem: maintaining an old IE engine for intranet customers and letting IT admins select what servers it is used with. Maintaining only one legacy engine (e.g. IE 5.5 aka. the current IE7 quirks mode) and for intranets only is better than having sites on the public Web lock into a particular engine versions.

For the second problem the solution seems to be building feature parity with Firefox, Safari and Opera and then minting a new User-Agent string without the substring “MSIE” to break free of old expectations.