我觉得Windows已经变成了一个怪物。
很多当初良好的设计理念和技巧已经为层层的妥协性和兼容性考虑搞得面目全非。它的内核变得如此复杂甚至于浏览器已经变成了内核中最中枢的部分之一。它的庞大成为臃肿和脆弱而不是强大的代名词。这个操作系统究竟还能否胜任我们在上面进行创新和开拓,我很怀疑。
Vista历时5年,千呼万唤,始见真身。但本来有的很多前端理念最后都只能割爱,比如最为可惜的就是提出transaction based filesystem的WinFX。关于各种内幕,人们问的最多的就是:5年的开发过程究竟发生了什么,为什么需要那么久,而又为什么最后还是砍掉了如此多的功能。我不想信口开河,只是个人认为,整个Windows系统长期积累的复杂性已经让很多有意义有魄力有革命性的创新无法在上面自由发挥。人们经常发现,你要这样做,就会影响到这个,然后会牵连到那个,最后这里有那么一个潜伏的bug就引爆了。在这样一个不是磐石一块而如迷宫一般的地基上建造出来的只能是脆弱不稳定臭虫满天飞的系统,微软的同事们也许会明白我在说什么,Vista开发到2年半后的那次Reset就是最好的证明。
最近自己碰到的两件事:
1. 我们组的project进入了最后部署阶段。就是这样一个还不算复杂的Alpha版的网络软件系统,我们在制作安装程序的时候居然用到了不下8种不同的Microsoft technology,什么Active Directory, IIS Diag, Virtual Directory, Application Pool, Winhttpcertcfg, Webstore, EventLog 粉墨登场琳琅满目不一而足。写setup的那位倒是好好秀了一把他对微软技术的熟悉程度,但我们都一致地为这样的本末倒置无颜以对。我最后揶揄地说:这个setup程序好像都要比我们真正的软件还要大了。
2. 我昨天发现IIS有这么一个限制:IIS不允许request url的路径里有冒号(colon, " : " ),一旦request url的路径里有冒号,IIS直接400 Bad Request。这个真是迭迭怪事,最后我在网上还真搜到了解释:
IIS does not permit colons in the URL. This is because the NTFS file system
considers a colon to be a special character that's used to denote alternate
streams within a file. If your example URL below were handled by the static
file handler in IIS, it would attemps to open the stream called "blah"
within a file called "blah" in the "script.cfm" directory under wwwroot.
More specifically, without this limitation, if a client were to request
http://www.example.com/script.cfm::$data, then the contents of the
script.cfm file would get sent to the client instead of invoking ColdFusion <http://forums.devshed.com/>
to process script.cfm.
If you want to prevent IIS from parsing your data, then put it either in the
query string or the entity body. A colon would be allowed in either of
those places.
Thank you,
-Wade A. Hilmo,
-Microsoft
大意是说因为NTFS文件系统的一个限制,所以IIS不接受request url path里的冒号,如果一定要用冒号,请放到query string里(就是问号?后面跟的东西)或者用request content body。回答的Wade Hilmo现在是IIS的Dev Lead。
我真的觉得悲哀,因为NTFS文件系统的一个潜在的安全漏洞,IIS居然可以做出违反RFC的事情来。RFC 1738明确说:
httpurl = "http://" hostport [ "/" hpath [ "?" search ]]
hpath = hsegment *[ "/" hsegment ]
hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
冒号完全是合法的url字符。
一个是文件系统,一个是web服务器,风马牛不相及的东西居然也能这么剪不断理还乱,我彻底败了。
就因为这一个小小的限制,我们需要重新定义我们的协议,然后牵连到我们的Windows Live Partner都要重新定义他们的接口。而且我们还要一直注意这个问题,如果将来onboard的partner在url中用了冒号,我们要想想会不会出问题(就我们所知,确实已经发现有这样潜在的partner在他们的协议中用了冒号)。我们又要.... 还要么?我是觉得够了。
===========================================================================
这是在新的Laptop上的新的Vista系统里写的第一篇blog,原本不应该这么攻击自己公司的产品的,而且说实在话,用了这些时间感觉Vista也是还不错的系统,除了那个可笑之极的Cancel or Allow的对话框(不是说不好问,但问一遍就够了吧,还没完没了地问了)。不过我真是觉得Windows系统已经到了一个很危险的阶段,而与此同时Linux和Mac OS的长足进步更是一日千里(我至今记得第一次看到Ubuntu和OS Tiger时惊艳的记忆,尤其是OS Tiger,我对这个基于unix内核的系统爱不释手)。我们应该有勇气像当初苹果一样,壮士断腕,重起炉灶,而不是还是如此这般3天一小修5天一大补地搞了。Windows真的是很危险,我们不能再靠搞搞花哨的用户界面来理所当然地认为用户还会掏钱买我们的产品。
有人说,重起炉灶,说得轻巧,这么多以前的用户怎么办?都不管了?
不,当然要管。利用virtualization提供向前兼容支持,保留底层的内核,重新开发核心的安全组件,那个奇怪的registry应该好好重新设计了,而网络时代使用越来越频繁的digital certification management,digital rights management,等等功能都要重新简化设计。这当然是很复杂很复杂的事情,但关键的是改变态度,办法是人想的,但态度决定一切。
打印 | 张贴于 2007-03-21 18:13:00 | Tag:暂无标签
留言反馈
这是“成功者的烦恼”,继续背,直到死的那一天。
你觉得他滥也许只是你太过熟悉windows,多耍耍ubuntu或者osx,用下来的感觉也不一定好到哪里去
对于Windows,确实是为了商业的考量加入了太多因为客户体验而不得不加入的技术,以及为了兼容前代技术而做出的牺牲。但这恰恰是商业运作所迫切要求的。否则,Windows也不会是使用量最大的操作系统了。
同样个性与个性是冲突的,偏向一方面必然导致另一方面不足,为了易用性舍弃安全,造就了老windows,而基于安全考虑加入了UAC,同样必然会使用户体验变糟,在指责这个的同时不妨对比一下其他系统,相对于一个root用户就可以不慎破坏一切以及无休止的sudo来说,UAC真倒是会让人觉得可爱了。
Windows确实臃肿了,但也要看到在臃肿的同时,它仍然能保持强大的活力,来不断实现新突破,仅此一点,MS就值得赞叹。
一个成熟的产品不会是完美的。当然,这并不影响我们对完美的追求。
Like my post after reading Joel’s? That’s the best compliment I’ve ever had. Thanks, man. ;-)
@装配脑袋
The development of WinFS was initially planned back to 1990, at that time, it was “革命性”“超前”的.
If Vista has it, I bet search feature will be 10x times cooler. Now I have to rate my photos in different software again and again just because they don’t know each other from metadata point of view.
做开发的话就很不方便...
用了几天Vista,觉得除了IIS7.0实在没有什么理由让我立刻把开发环境立刻迁移到这个平台上...
看过你发表的文章,确实很不错,特别是读了Joel Spolsky其他文章之后。
UAC如果那么好,就不会大部分用户都想法设法欲关之而后快了。最起码我身边的Vista用户都是关掉UAC用的。
如果它老出来的话说明你频繁的需要进行管理员权限的操作,是不是该考虑更换所用的软件或者使用计算机的习惯?
很多这里的blogger都会吹捧一下微软的技术,甚至于缺点也要赞美两句。
但这么真诚的评价还是第一次看到的。
不禁windows是怪物,微软的很多系统已经都达到怪物级别的了。
However, speaking of OS innovation:
To many companies building business applications, OS is just an ‘API provider’. If I’m writing .NET based application (assuming I don’t use unmanaged code too much), I only care about .NET framework, right? I don’t care if you rewrite the whole OS, as long as you keep .NET framework compatibility.
So, just give me a .NET OS. If you can come up with a ‘.NET virtual machine’ running on VMWare ESX server, great. If you can build Microsoft Virtual PC into *any PCs’* BIOS and build a .NET OS on it, even better. (Google ‘BEA Java OS VMWare ESX’, you’ll know what I’m talking about. Wait, did I say Google, not MSN live search? Sorry, dude.)
But I guess Microsoft just doesn’t have time to do this stuff now. And I don’t blame it, although we should. Why? Because Microsoft has disappointed us for a long while and we don’t even expect that much now.
Where’s Microsoft Reader built on WPF? I saw NY Times reader.
Where’s MSN messenger for WPF? I saw Yahoo messenger on WPF coming.
Where’s Microsoft Picasa-like application? It’s simple, right?
Where’s Microsoft Flickr-like service (with web service API)?
How many Microsoft major applications are based on .NET framework?
…
Don’t think Microsoft will do any major innovations in the near future. Sad…
就像demonfox说的,除非来一次类似于Mac OS9->Mac OSX的变革,否则,Windows还是要继续背着这个大大的蜗牛壳。
但是,Mac OS9->Mac OSX的原因有很多,我觉得有更大程度是因为Apple把Jobs踢出门口之后Jobs的公司做了NextStep(同样是基于BSD,在技术上与Mac OSX的血亲关系更重)的,然后apple不行了又请了jobs回来做救火掌门。如果Jobs一直待在Apple,很难说他就有足够的魄力和勇气。
现在已经没人敢改windows的代码了,windows 2000的任何一行代码的改动,要经过的层层审核,闹够了。
微软以前以向前兼容为本钱,构建了整个行业平台,但是现在向前兼容的代价,已经使windows处于危险关头。
我特别佩服ubuntu那种半年推出一个版本的稳定性。说真的,微软有这个星球上聪明人最多的这样一个群体,却只能蜗牛背着重重的壳呀,一步一步地往上爬,却看着人家轻装上阵健步如飞。。。
保护投资这个想法太危险了,微软这就是教训。
两个简练的汉字被疑为广告......