Only Me and Me

慢慢看就知道了

说说

 
我写在joycode那边的一篇blog,没有太复杂的技术内容,转过来大家看看。
 
=======================================================================================

我觉得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://&quot; 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,等等功能都要重新简化设计。这当然是很复杂很复杂的事情,但关键的是改变态度,办法是人想的,但态度决定一切。

 
=========================================
 
Me: Why our stock price doesn’t surge?
Bill: Because we are not a sexy company any more.
 

14 responses to “说说

  1. Corona March 21, 2007 at 7:24 pm

    1.技术问题看不懂
    2.其实2k系统蛮好的

  2. Steven March 21, 2007 at 9:01 pm

    其实,我们搞技术的都十分喜欢start from scratch,特别是有洁癖的那种。Software对于我们而言,更像是一件艺术品,我们希望这件作品能够在各方面都完美,和谐。可惜的是,现实并非总是这样。
     
    我不敢想象一个如windows这样的复杂系统要从系统架构上重新重构会是一个怎么样的结果,因为,我目前在做的一个比windows要简单得多BIOS系统的重构就遇到了很多很多障碍。最大的障碍并不是技术上的,而是从Customer来的。很多Customer他们考虑的并不是他们用的系统有多么的Sexy,他们care的只是系统可用,他们以前的Application不会crash掉,如果新的系统在功能上有了只有那么一点点的改变,都会让Customer感到不满。要做到Backward Compatible不是一件容易的事情,并且,一旦第一个版本没有做好,带给Customer的受挫感是无法挽回的。
     
    所以,Vista花了这么长时间才面世,feature也砍了不少,并不是一件让人那么意外的事情,特别是对于windows这样一个如此庞大的系统而言。估计你的想法比Vista更加aggressive,要搞定估计要花10年甚至更长的,呵呵。

  3. Mira March 21, 2007 at 10:45 pm

    hahaha, sexy=healthy & attractive …

  4. Goden March 21, 2007 at 11:46 pm

    IPv6 还2个Colons呢….:)

  5. Demon March 22, 2007 at 1:15 am

    @ 泥巴:2k不能再用了,风险太大,号称绝对防不住hacker。
     
    @ Steven:我没有那样大的ego,我只是觉得Windows系统再这样来一个版本的话我就要投奔他处去了。我们总是因为用户不要sexy,用户都是很傻的,用户只要稳定,这就是我所说的我们理所当然地认为用户一定会买我们的产品。从前DEC就是这么以为的,后来挂了。Sun也这么以为过,也差点挂了。凭什么就认为Microsoft不会挂掉。
     
    @ à_plus_tard:sexy = innovative + energetic
     
    @ Goden: 协议这个东西是最最不能说改就改的。我写一个检查http authentication header的函数时被dev lead退回来重写了多少遍伯伯大概是不知道,我自己做过有体会。IPv6有IPv6的协议和RFC,像IIS这样随便改改,早晚在IPv6那里也要搞出笑话来。
     

  6. Yuan March 22, 2007 at 1:41 am

    作项目特别是经年累积的那种项目最大的一个特点就是:在一个垃圾堆上堆一个更大的垃圾堆,还要保证这个垃圾堆不会倒掉…
    谁让俺们DEV都是那么地有"创造性"呢,太多事情有着千奇百怪的workround🙂
     
    ps: UAC直接关掉…

  7. Unknown March 22, 2007 at 7:12 am

    "态度决定一切", 过了十几年了,论点都还没有变呀,你初中时候一片议论文的论点也是这一条,不知道你还记不记得,说不定我回家仔细找找,还能找到你的手稿真迹类:)

  8. Joanna March 22, 2007 at 9:25 pm

    在我看来,如果每个人都在自己的岗位上各尽其责,尽力去做自己所认为完美的事情,这是极好的事。
    工作了一段时间后,现在的我对于那片乱摊子不再歇斯底里地乱吼,不再去想是否会promoted的事情, 而是开始有信心每一天都让它完美一点点,然后等我把绝大部分的东西都弄好以后,再骄傲地对别人说:来,看看我的宝贝儿有多棒!
    开始每天都很快乐,开始喜欢周围的人…..
     

  9. March 22, 2007 at 10:25 pm

    我听说I\’m的那个活动仅限于美国IP才有效?

  10. Demon March 23, 2007 at 8:12 am

     
    @ NickLedson: 呵呵,我还是继续尝试一段时间UAC。
     
    @ Grace: 那很好,我的愿望是再过10年我还是这样,: )
     
    @ Joanna: 独善其身是一种很好的态度,我经常那样。只不过我对周围的人或事也会挑剔,if I feel that\’s the right thing to do.  我学着有节制有建设性,并且就事论事,但总还是会有时候考虑不周到。
     
    @ 巾:I\’m全球可以显示,但只有美国区用户的chat才会被折合成donation。
     

  11. 霹雳老兔子 March 25, 2007 at 7:56 am

    最近有些朋友的MSN不能访问,没有任何理由,可能也是技术方面的问题吧

  12. Demon March 26, 2007 at 11:15 am

     
    Spaces或者messenger间或会有些负载的问题,中国区的用户尤其。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: