要解决操作系统的垄断问题,首先要开放API

不同视角、不同观点、深度探讨,禁止人品和道德攻击
头像
ving
帖子: 3741
注册时间: 2007-07-29 16:47
来自: 地精魔法学院

#16

帖子 ving » 2007-09-04 19:38

我的帖子并不是要说linux应该加入win的API,而是说win能垄断和窒息市场的关键在于兼容问题。由于PC上的程序基本上都是为win开发的,其他操作系统即使很优秀也无法与之公平竞争。而要打破这一点就需要MS开放API。
另外,我并不认为MS告诉你API怎么用就等于开放API。UltraSPARC的汇编我们知道,但因此就能生产与之兼容的CPU?
PhoenixJ
帖子: 1492
注册时间: 2007-08-09 3:33
系统: Windows 12.04

#17

帖子 PhoenixJ » 2007-09-04 20:09

ving的意思其实就是开放源码,呵呵。

不是公开怎么用API,而是公开这个API是怎么做的。

不过基本上不可能——法律上这是MS的版权。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#18

帖子 BigSnake.NET » 2007-09-04 20:14

ving 写了:
iblicf 写了:ls 你知道什么是 API 吧?
很有意思的问题哟
BigSnake.NET 写了:
ving 写了:-_-
公开API的用法并不表示API是开放的,何况微软也没有公开所有API的用法,另外如果我没记错的话,在其他操作系统中使用windows API构成侵权。
什么叫做"在其他操作系统中使用win API"..
"其他操作系统"怎么会有Win的API?
6楼呢?
那个不叫"Win的API", 只是一个跟Win API接口一样的API
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
猛将兄
帖子: 2052
注册时间: 2005-10-19 17:33

#19

帖子 猛将兄 » 2007-09-04 20:48

楼主,我还是很怀疑你知不知道什么教API?
API本来就是一个interface。告诉你怎么用就是他的责任。微软实现拉一套,然后告诉我们他的接口。不就是API了,Interface本来就是开放的。微软没有申请专利说别人不能用一样的定义,否则他老早告Wine了
从你后面的帖子,你的意思似乎是他要开放源代码?我也不认为这样有必要。他开放了源代码,还是不能用,否则被控抄袭。还不如根据他的规范实现一套GNU的实现。ReactOS和Wine就是干这些事情的
头像
ving
帖子: 3741
注册时间: 2007-07-29 16:47
来自: 地精魔法学院

#20

帖子 ving » 2007-09-04 21:35

发现这里也有和我有类似看法的人,我想您一定很乐意教导他什么是API吧
http://linux.insigma.com.cn/jszl.asp?docid=115576773
"先看Windows的系统调用界面,这个界面本身就是不公开的"
既然只要知道微软公开的那套东西就可以作出兼容的操作系统,您能不能告诉我,为什么在过去的这么长时间里,尽管有着许多包括像BeOS这样优秀OS在内的与windows竞争的操作系统,却没有一个兼容windows的商业操作系统?我想他们应该不会不知道兼容问题是他们最大的软肋吧?
既然只要知道微软公开的那套东西就可以作出兼容的操作系统,参考一下全新设计的BeOS所花费的时间,为什么以NT4.0为目标的ReactOS这个项目花了大约十年时间,到现在还只是alpha版?

完全开放windows源码MS不可能做到,但是MS放些血是应该的。希望有一天操作系统能够像PC或X86 CPU一样,各家之间都可以互相兼容。
上次由 ving 在 2007-09-05 9:54,总共编辑 1 次。
头像
猛将兄
帖子: 2052
注册时间: 2005-10-19 17:33

#21

帖子 猛将兄 » 2007-09-04 21:56

他的观点和你一样?呵呵,比较搞笑。你一开始根本没有说兼容内核的事情。兼容内核和应用程序API兼容根本就是两回事。不要把自己和毛老比,他写的书还是不错的,我想我们这里还没有人达到他的高度
头像
ving
帖子: 3741
注册时间: 2007-07-29 16:47
来自: 地精魔法学院

呵呵,原来我还是有幽默细胞的呀

#22

帖子 ving » 2007-09-04 22:40

注意,是类似,不是一样。
PS:其实你的想法我明白,可就像我们小时候看了十万个为什么里原子弹的原理并不意味这我们就能造原子弹一样,问题常常不会像看上去的那么容易解决。
MS介绍了API的用法是不错,但windows是一个复杂的闭源系统,如果MS不提供相关深层机制的文档的话,我想开发兼容系统恐怕不是那么容易的。
头像
AutumnHealth
帖子: 776
注册时间: 2006-12-20 18:41

#23

帖子 AutumnHealth » 2007-09-04 23:07

说白了就是统一标准的问题。

硬件上,就像LZ说的那样,各厂商提供统一的接口,那么不同厂商生产的不同设备可以结合在一起成为一台冯诺依曼体系结构的计算机。这个时候,Intel告诉你了芯片里面是怎么做的吗?没必要,只要统一接口就可以了。事实上,其他硬件厂商根本不用去关心Intel芯片是怎么做的,他只要知道那个接口是怎么定义的就可以了。

internet上,统一的协议使得不同系统/设备之间都可以无障碍得实现通信,而不管各种设备使用的是什么系统和怎么实现的。

OS上,没必要让微软公开源代码,只要定义一个统一的系统接口,所有应用程序按照这个定义来开发,那么所有应用程序不就可以在各种不同的系统上运行了?

LZ是这个意思吗?
头像
ving
帖子: 3741
注册时间: 2007-07-29 16:47
来自: 地精魔法学院

thx

#24

帖子 ving » 2007-09-05 9:57

这正是我所希望看到的局面。
一些地方可能我没有说清楚,从而让大家产生了误解,抱歉。
头像
猛将兄
帖子: 2052
注册时间: 2005-10-19 17:33

#25

帖子 猛将兄 » 2007-09-05 10:12

那这就是最初OS实现的时候,HAL,硬件抽象层做的事情
然后,到后来,OS变多了。每个OS的HAL都不一样,就出来了各种不一样的syscall。Linux的syscall大概是100多个,windows好像有300多个,并没有完全公开,但公开了大部分。
这样,为了让程序好写,大家想了各种办法
各种编程语言,统一了一个规范,然后大家按照各个ISO标准写,各个平台都可以通用。
但问题有时候更复杂,所以就有了虚拟机的概念(其实OS里面本来就有虚拟机这个概念,用以抽象硬件,和HAL紧密相连),让大家编译好的二进制代码在各平台通用。这最著名的就是java 虚拟机。他充当的就是在各平台做翻译官的角色。
以后会如何还很难说。毛老说的兼容内核,实际上是要让linux的能直接完全处理windows的syscall,这样对于硬件驱动问题都解决了。这个反向工程出来,当然是做得到的。问题是,就怕微软改动syscall,更不上他的脚步啊。
头像
AutumnHealth
帖子: 776
注册时间: 2006-12-20 18:41

#26

帖子 AutumnHealth » 2007-09-05 13:02

居然忘记提到JVM了

做个假设,假如所有的软件都是用Java开发的,那么软件就跟OS无关了,甚至可以那到手机等嵌入式设备运行

LZ的意思就是著名的“一次编写,到处运行”吧。。。哈哈
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

#27

帖子 Strange » 2007-09-05 14:57

ls的想法是大大错误的,先能造出实用化的能native运行java字节码的机器再说吧
现在的java虚拟机哪个不是和os和机器大大相关的啊,只是减少了使用java人的事情,一点没有减少开发java人的事情
头像
猛将兄
帖子: 2052
注册时间: 2005-10-19 17:33

#28

帖子 猛将兄 » 2007-09-05 16:36

虚拟机解决的是application的问题。现在的问题是,大量设备没办法在linux上面用,毛老要解决的是这个问题。当然,这个问题解决了,application的问题就容易办了
头像
AutumnHealth
帖子: 776
注册时间: 2006-12-20 18:41

#29

帖子 AutumnHealth » 2007-09-06 21:58

Strange 写了:ls的想法是大大错误的,先能造出实用化的能native运行java字节码的机器再说吧
现在的java虚拟机哪个不是和os和机器大大相关的啊,只是减少了使用java人的事情,一点没有减少开发java人的事情
这个就没有必要了吧,真做java cpu的话,那只能运行java字节码?不管什么语言写的程序都编译成java字节码?
那不是跟现在编译成二进制的机器码一个道理么

貌似跑题了,lz说的是API,不是说cpu,呵呵
vupiggy
帖子: 89
注册时间: 2006-03-19 18:25
来自: FZ->TJ->PEK->AMS->MTL

#30

帖子 vupiggy » 2007-09-09 2:54

猛将兄 写了: 我想楼主可能不太懂可执行文件是怎么回事。其实现代操作系统支持的可执行文件,都是一个中间介质,不包含直接的机器码。由OS解释之后执行。微软用的是PE格式,Unix是ELF格式。格式都是公开的,就看你拿到之后怎么执行了
您就别急着说别人不懂了,您说的也不咋对,甚至可以说是谬之千里。

可执行文件不包含直接的机器码?大错特错!java的.class文件才是像你说的那样不包含机器码,其行为由jvm解释执行,PE和ELF都包含了完整的机器码!用objdump工具dump一个可执行文件出来,看到的那些什么push %epb...不是机器汇编指令是啥?这是objdump将机器码翻成汇编语言的结果,在可执行文件里就是如假包换的机器码0x55(objdump的输出中的一栏里就有机器码)。内核解释,还要把它们解释成什么?

而且解释ELF头部的也不是什么内核,是loader!当loader将可执行文件装载入内存之后(也就是execve之后,也就是jump到正文段的第一条指令之后),程序的执行也没loader什么事儿了,ELF头部无非就是为了记录一些诸如这个程序是静态链接还是动态链接一类为创建程序执行环境以及虚存布局的信息,可执行文件余下的那些text段的内容不是机器码是什么?这些可都是可以被cpu从内存中装载进来而直接执行的,何来内核解释和执行?应用程序和内核交互的地方就是系统调用,这只是说这个时候cpu执行内核的一段代码于当前进程上下文上,也谈不上是内核执行了应用程序。内核说白了就是个调度器和中断处理器,让它去解释这个解释那个,把应该是用户空间程序做的是强加给内核,想累死它呀:P

开放所有的api当然是有意义的,这样有利于开发可移植性强的应用程序,当然不是一次编写,到处执行,而是一次编写到处编译。想当年酷爱抄袭的瘟到死的开发者们照抄了苹果的几乎所有窗口系统的API,诸如创建窗口等等函数,连参数个数和类型,语法语义都一模一样,一个结果是,微软的office可以几乎不作改动就在苹果系统上编译过,略加改动就可以跑。

另外一层意义就是开放了全部的api(当然不止是系统调用,还有窗口系统,网络组件的),看清楚是全部的,目前你能看到的根本不是全部的,否则怎么会有诸如undocumented windows nt这样的书存在?大大有利于其它应用程序开发商开发更好的基于瘟到死的软件而不怕被微软捏着脖子,避免了微软利用操作系统开放商和应用程序开发商双重身份来进行不正当竞争。楼主的提议很对!!!不过对于这种善于钻法律空子的公司,也许只有拆分了它才可能实现吧,吼吼。
上次由 vupiggy 在 2007-09-09 3:09,总共编辑 1 次。
回复