主题:关于Linux的推广——普通用户篇 -- 万斤
跨平台软件有很多,最熟知的如Firefox。可以说只要开发者想做,都可以把软件做成跨平台的,不是什么难事。只是有些软件一开始开发时就没有考虑跨平台而已。
那我说从1985年的windows1.0到现在的2008也有规范,估计也没人会说错。
OK,我的记性不好,那么根据wiki和GNU官方网站:
UNIX是一种广泛使用的商业操作系统的名称。
由于 GNU 将要实现 UNIX 系统的接口标准,因此 GNU 计划可以分别开发不同的操作系统部件。
1992年,Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。
GNU通用公共许可证(GNU General Public License)(英文通常以GNU GPL或是直接简短的以GPL表示),是一个广泛被使用的自由软件许可证
1. GNU设计的时候是根据UNIX的接口标准,与Windows何干?为什么Gates要理睬这个东西?
2. UNIX是一类OS的通用名称,不是规范。UNIX/Linux体系变种极多,也从来没有规范。你要说规范,甚至是“操作系统的规范”,请起码也得说ISO/IEC多少多少吧?
3. 系统移植性。正如依靠GNU,软件在UNIX/Linux体系内可以互通一样。在Windows家族内部,依靠“Windows规范”,软件的移植性也没有大问题。甚至在Windows家族内部,都不用重编译。这对商用软件绝对是大好事。
4. 再说一次,GNU只是个项目的名字,不是“规范”,更不是什么“系统组件”
linux下有别的类似软件么?
如果从设计之初就考虑跨平台,当然一切都好办。但如果让已有的软件跨平台移植,90%都得重新架构,所以我才说算是“超级大难题”。不是难在技术实现上,是难在是否有这个必要和是否值得。
但如果有人捧着GNU到处招摇,不说盖子,就是UNIX/Linux内部的软件商,能有几家同意呢?
Office和photoshop都有mac版。可以说只要设计不是太烂的软件作跨平台移植并不是非常困难的事。很多软件没有跨平台,最主要原因是其他平台的市场份额不够,开发商不屑去做而已。
不清楚M$是怎么整得Office可以移植的(我一直以为是神话),但Windows下的(大型软件的)开发使用的那些工具,难得有几个可以兼容UNIX/Linux的。
我说90%只是形容一下“很多很多很多”,呵呵,倒没有数据支持这么说。但我可以说大部分软件在设计之初就没有考虑跨平台,在事后考虑移植的时候,软件的设计在移植能力上估计没几个算不烂的。也是啊,既然Linux上没这个份额,设计的时候干嘛还费事费人工去考虑这个呢
不过我对这点确实不懂,有空请科普一下,如果一个软件需要考虑跨平台,应该在开发之初应该多考虑什么?首先选个好用的跨平台编译器是肯定的,然后呢?
也不一定要业界老大才能做。很多开源中小软件都是跨平台的。主要考虑就是如果一开始就打算跨平台,往往都选用一个跨平台的函数库作支持,比如楼下说的QT就是非常棒的一款。
即使一开始没有考虑跨平台,如果设计得当事后再做也不是很难。因为一般软件里不跨平台的部分多是界面部分还有一些底层支持,而大部分内部逻辑都是与平台无关的。软件设计的一个原则就是内部逻辑与外部界面分开。所以要移植只要把界面部分按要求重写就行了,内部可以原封不动。基本上就是个力气活。当然如果设计得不好,各部分代码混杂在一起自然就比较惨,但一般有点经验的都不会这样。
至于编译器等开发环境问题,只要你的代码不依赖某特定环境(比如MFC),不同平台下可以用不同编译环境来做。
分歧就是,你觉得 windows 做得很有规范(估且这么说吧);我不那么觉得。为了防范像昨天那样空对空,这里举个例子——FSSTND
这是 unix-like 系统的目录标准,由一个称为 Free Standards Group 的 non-profit organization 来维护的,这个组织是什么你自己看下吧。我不清楚 windows 的情况,提问很简单的, Windows 做过类似的承诺,有相似的文件吗?
我只说过 GNU 是一个(可移植性的)典范……
一切 OK ,让人推荐的话,我推 GNU 的工具链,完善的文档和解决方案一应俱全,跟其它工具兼容的也很好,可以有各奇怪的搭配选择。
我要说的是,只要你遵循相关的规范,程序的移植没有你想的那么困难……
1. 在windows和UNIX/Linux中,有什么通用的编译器和库吗?LS的QT大概算一个,还有什么其他比较有名的吗?(解释型的python,php之类除外)
2. 编译器和库可以混用吗?看起来QT也是CPP的,可以用MFC库吗?或者说VC可以用QT库吗?
3. 如果软件原先是用VC开发的,可以直接copy源代码到QT(或者VJ的copy到Linux下的java编译器什么的),然后换一下界面和底层的库调用函数就好了吗?还是语法结构什么的都得按QT的来?如果每句话都得重写,移植一个稍大的软件的体力劳动不比挖煤轻啊——或者有工具可以自动转换?
4. 虽然不喜欢做职业编程,但个人喜好编些小程序玩,有空请推荐一款容易上手,功能强大,支持平台多的free的编译器和库。QT?谢谢。
系统文件都在Windows或Winnt下,程序文件在Program files下,用户profile在Documents and Setting或users(最近Vista刚改,不清楚为什么,可能为了跟mac兼容)。很长时间以来都是这样的。
你要知道从Windows 1.0到现在的2008,windows结构变动有多大。但10多年前的Win95的某些程序在2008上仍然可以跑(无须重编译),这就说明了Windows还是有一定规范的。当然,Gates愿不愿意给出承诺,或者公开文档是另一回事。
编译器可以各用各的,不需要通用,因为语言是标准的。主要是调用的库不同。linux下的编译器主要是gnu系列(gcc,g++等)。跨平台库么除了QT外还有很多,gtk,wxWidgets什么的,但是QT我觉得是最好用的。
你这些问题,对于完全没有linux编程经验的人比较难解释,说详细了会很长,说简单了我恐怕你也仍然是一头雾水。我觉得你要是真有兴趣就学学在linux下编些小程序,等你积累了些linux/unix下的编程经验,到时候这些问题都自然明了。