|
输入法艰辛和不白之冤
笔者长期以来从事windows系统下IME版输入法的研发,虽说有些收获,也拿些小奖,也有来自平面和网络媒体的褒扬,同行、用户的鼓励和赞美更不多说。自诩了这么多,你一定以为我的研发周围充满着快乐、和谐。而我恰恰想告诉你的是:我体会到的是其中的辛酸和艰难,它们远远多于快乐。
首先是来自同行的抄袭特别是国际巨头抄袭,很让你没办法甚至只能放弃。法律界的专家们说了,我国的著作权法是目前保护软件产权最有效的手段。可他们忘了,这部所谓的法制定于上世纪80年代,那时计算机软件在我国还没有普及。其实它唯一能保护的是软件的源代码,即保护软件的表达部分,不能保护创意本身,我打个比方,奥运会会徽五环标志,任何人非经允许不得使用。但倘若这个标志当初在我国作为软件按著作权来申请版权的话,申请人只能申请以什么笔、什么颜色的墨水、左手画还是右手画,申了半天还是画法,如果第二个人换一种笔换一种颜色的墨水换一只手画出它,也不算违法,因为笔、墨水、画法都是创意的表达。明白了吧?说到这里,我想是钱,只要有钱,你可以雇佣到你任何你需要达到某种计算机技能的人抄袭你任何你见到过的软件(前提这个软件有好的创意,傻瓜除外),至少在我国你的所作所为不会违法,相反你抄袭的成果也是受到保护的。计算机发展到今天,该有的创意都被人创得差不多了,再有一个好的创意,需要开发者绞尽脑计,等你创出来时,它就不是你的了。
其次,我想是开发的艰辛吧,从win95开始吧,ime版的输入法很是司空见惯了,以至于很多人甚至同行以为输入法太好开发了,其实我想说的是它不好开发。关于这一点我说的不多,借一篇清华大学论坛里别人发的贴子,有兴趣的可以点开这里来看看。
最后是不白之冤吧,这个是开发者心中永远的痛,
输入法中相对好编写算是外挂版,一个键盘钩子在用户输入之前勾住输入内容,再往编辑框内输出另外的内容,如把编码转换成中文输出,它不需注册自己到windows上。但是外挂版最大的缺点就是兼容性。所以很多开发输入法的都放弃了这种类形的开发,转行或转入IME版的开发。笔者就是算是后一种吧。IME版不存在上述问题,它给使用者带来方便可却给开发者带来艰难和蒙受不白之冤。
1:IME版输入法绿色问题:因为它必须把自身注册到windows下,即把相关内容写入注册表,Windows读到相关的注册表才会相应加载它。在流氓软件、灰色软件满天飞的今天,绿色就渐成了时尚了,所以国内很多高手乐此不彼地把各种好用的软件工具做成绿色包,不需要安装,也可以放在U盘里随用随插。所以很多用户向我抱怨我的输入法不够绿色。而我却自责不能为他们开发绿色的IME版输入法。但是这个冤屈相对下面这个算是小的了。
2:IME输入法自启动问题:在时下,各种软件打着免费旗号,无论视频的、聊天的、下载的……谁默认安装不是自启动,自启动给开发者带来最大的好处就是可以弹出广告,带来利益,这个无可厚非,天下本来就没有免费的午餐。但是太多的自启动给用户带来的是不便,因为不是每个软件一开机就要被使用,它们却无端地占用了用户宝贵内存资源,网络带宽,拖慢机器运行速度。就拿笔者的叔叔来说吧,虽是在偏僻的农村,但3年前随着家电下乡那会儿赶时髦买了台配置很一般的家用机当摆设,直到隔了1年我回老家后教会了他打五笔(他小学那年代没学过拼音)才渐渐用上了,这本是一件好事,然而我却后悔了,因为我要隔个把月远程给他清理一下各种不需要自启动的软件,否则机器就慢得跟蜗牛一样,费时费力。这也难怪现在的各种安全卫士满天飞,3年前某卫士软件将输入法作为启动项查杀,后来另一卫士也跟进,再后来几乎全部跟进了,这些我都默认了,因为基于上述第1条的认识,虽然我自己没有主动过也没有任何技术手段能将IME版输入法设成自启动项,说白了,ime就是一个dll,c:\windows\system32\文件夹下有很多.dll和.ime,谁有本事双击启动它们一次?。但我认为windows启动时会加载一次输入法,因为IME版的输入法要写在注册表里,也就是说它至少被动启动了,所以经常很多用户听信了这些卫士的话用户责问我为什么要把它做成自启动项,我无言以对。直到几天前我在调试64位输入法安装时,我才有了新的认识。原来我们这些开发IME版输入法的作者们替各种卫士因技术手段达不到而蒙受了不白之冤,背了3年的黑锅,所以不说出来,心里很堵。经查,windows在启动时,内核会确实调用api函数LoadLibraryEx加载一次每个被注册的输入法。从字面来说,LoadLibraryEx,调用嘛,被调用后,当然想执行啥就执行啥,只要不是用户启动,就算被动被windows启动也算自启动,当初也这么认为的,不冤。可是接下来看到启动参数后,才真相大白,原来调用LoadLibraryEx传的参数是LOAD_LIBRARY_AS_IMAGE_RESOURCE,点击这里可以访问权威的MSDN上对该参数的说明,不要求你非搞IT的全明白.原话是If this value is used, the system maps the file into the process's virtual address space as an image file. However, the loader does not load the static imports or perform the other usual initialization steps. Use this flag when you want to load a DLL only to extract messages or resources from it. If forced integrity checking is desired for the loaded file then--大约的意思,当成资源文件访问它,如访问版本号,语言信息,驱动类型等等,检查合法性嘛,装载并不执行,只是当成资源访问,不然windows怎么知道它是不是输入法。这些话,用户不明白,难道这些技术力量这么雄厚的安全公司也不明白?怪哉!而恰恰受苦受难的是我们这些开发者,真正的不白之冤啊。
后来想想,其实用户能获得到的版本都是我们调试得自认为性能差不多的输入法版本,然而在我们开发者手上,没完没了地增删修改代码,“啪”得一声引起调用程序(如office,记事本)当场毙命的版本多得去了。要是这些版本的输入法真能自启动了,注意哟,是内核调用,那不用说开发,我们这些开发者边调试边装系统都来不及。可是笔者从来没有因为它们装过系统,这是因为它们从来没有真正自启动过,M$也不可能在那么关键内核启动的位置SB到主动调用执行一段非自己的程序。你说不是吗? |
|