中国开发网: 论坛: 程序员情感CBD: 贴子 488171
amo
我觉得Windows已经变成了一个怪物
http://blog.joycode.com/demonfox/archive/2007/03/21/98381.aspx

我觉得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,等等功能都要重新简化设计。这当然是很复杂很复杂的事情,但关键的是改变态度,办法是人想的,但态度决定一切。
oooO ↘┏━┓ ↙ Oooo
( 踩)→┃你┃ ←(死 )
\ ( →┃√┃ ← ) /
  \_)↗┗━┛ ↖(_/


相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录