要解决操作系统的垄断问题,首先要开放API
- ving
- 帖子: 3741
- 注册时间: 2007-07-29 16:47
- 来自: 地精魔法学院
-
- 帖子: 1492
- 注册时间: 2007-08-09 3:33
- 系统: Windows 12.04
- BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
- 联系:
那个不叫"Win的API", 只是一个跟Win API接口一样的APIving 写了:很有意思的问题哟iblicf 写了:ls 你知道什么是 API 吧?
6楼呢?BigSnake.NET 写了:什么叫做"在其他操作系统中使用win API"..ving 写了:-_-
公开API的用法并不表示API是开放的,何况微软也没有公开所有API的用法,另外如果我没记错的话,在其他操作系统中使用windows API构成侵权。
"其他操作系统"怎么会有Win的API?
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
- 猛将兄
- 帖子: 2052
- 注册时间: 2005-10-19 17:33
- ving
- 帖子: 3741
- 注册时间: 2007-07-29 16:47
- 来自: 地精魔法学院
发现这里也有和我有类似看法的人,我想您一定很乐意教导他什么是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一样,各家之间都可以互相兼容。
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
- ving
- 帖子: 3741
- 注册时间: 2007-07-29 16:47
- 来自: 地精魔法学院
呵呵,原来我还是有幽默细胞的呀
注意,是类似,不是一样。
PS:其实你的想法我明白,可就像我们小时候看了十万个为什么里原子弹的原理并不意味这我们就能造原子弹一样,问题常常不会像看上去的那么容易解决。
MS介绍了API的用法是不错,但windows是一个复杂的闭源系统,如果MS不提供相关深层机制的文档的话,我想开发兼容系统恐怕不是那么容易的。
PS:其实你的想法我明白,可就像我们小时候看了十万个为什么里原子弹的原理并不意味这我们就能造原子弹一样,问题常常不会像看上去的那么容易解决。
MS介绍了API的用法是不错,但windows是一个复杂的闭源系统,如果MS不提供相关深层机制的文档的话,我想开发兼容系统恐怕不是那么容易的。
- AutumnHealth
- 帖子: 776
- 注册时间: 2006-12-20 18:41
说白了就是统一标准的问题。
硬件上,就像LZ说的那样,各厂商提供统一的接口,那么不同厂商生产的不同设备可以结合在一起成为一台冯诺依曼体系结构的计算机。这个时候,Intel告诉你了芯片里面是怎么做的吗?没必要,只要统一接口就可以了。事实上,其他硬件厂商根本不用去关心Intel芯片是怎么做的,他只要知道那个接口是怎么定义的就可以了。
internet上,统一的协议使得不同系统/设备之间都可以无障碍得实现通信,而不管各种设备使用的是什么系统和怎么实现的。
OS上,没必要让微软公开源代码,只要定义一个统一的系统接口,所有应用程序按照这个定义来开发,那么所有应用程序不就可以在各种不同的系统上运行了?
LZ是这个意思吗?
硬件上,就像LZ说的那样,各厂商提供统一的接口,那么不同厂商生产的不同设备可以结合在一起成为一台冯诺依曼体系结构的计算机。这个时候,Intel告诉你了芯片里面是怎么做的吗?没必要,只要统一接口就可以了。事实上,其他硬件厂商根本不用去关心Intel芯片是怎么做的,他只要知道那个接口是怎么定义的就可以了。
internet上,统一的协议使得不同系统/设备之间都可以无障碍得实现通信,而不管各种设备使用的是什么系统和怎么实现的。
OS上,没必要让微软公开源代码,只要定义一个统一的系统接口,所有应用程序按照这个定义来开发,那么所有应用程序不就可以在各种不同的系统上运行了?
LZ是这个意思吗?
- 猛将兄
- 帖子: 2052
- 注册时间: 2005-10-19 17:33
那这就是最初OS实现的时候,HAL,硬件抽象层做的事情
然后,到后来,OS变多了。每个OS的HAL都不一样,就出来了各种不一样的syscall。Linux的syscall大概是100多个,windows好像有300多个,并没有完全公开,但公开了大部分。
这样,为了让程序好写,大家想了各种办法
各种编程语言,统一了一个规范,然后大家按照各个ISO标准写,各个平台都可以通用。
但问题有时候更复杂,所以就有了虚拟机的概念(其实OS里面本来就有虚拟机这个概念,用以抽象硬件,和HAL紧密相连),让大家编译好的二进制代码在各平台通用。这最著名的就是java 虚拟机。他充当的就是在各平台做翻译官的角色。
以后会如何还很难说。毛老说的兼容内核,实际上是要让linux的能直接完全处理windows的syscall,这样对于硬件驱动问题都解决了。这个反向工程出来,当然是做得到的。问题是,就怕微软改动syscall,更不上他的脚步啊。
然后,到后来,OS变多了。每个OS的HAL都不一样,就出来了各种不一样的syscall。Linux的syscall大概是100多个,windows好像有300多个,并没有完全公开,但公开了大部分。
这样,为了让程序好写,大家想了各种办法
各种编程语言,统一了一个规范,然后大家按照各个ISO标准写,各个平台都可以通用。
但问题有时候更复杂,所以就有了虚拟机的概念(其实OS里面本来就有虚拟机这个概念,用以抽象硬件,和HAL紧密相连),让大家编译好的二进制代码在各平台通用。这最著名的就是java 虚拟机。他充当的就是在各平台做翻译官的角色。
以后会如何还很难说。毛老说的兼容内核,实际上是要让linux的能直接完全处理windows的syscall,这样对于硬件驱动问题都解决了。这个反向工程出来,当然是做得到的。问题是,就怕微软改动syscall,更不上他的脚步啊。
- AutumnHealth
- 帖子: 776
- 注册时间: 2006-12-20 18:41
- Strange
- 帖子: 1824
- 注册时间: 2006-05-19 9:54
- 来自: Shanghai
- 猛将兄
- 帖子: 2052
- 注册时间: 2005-10-19 17:33
- AutumnHealth
- 帖子: 776
- 注册时间: 2006-12-20 18:41
-
- 帖子: 89
- 注册时间: 2006-03-19 18:25
- 来自: FZ->TJ->PEK->AMS->MTL
您就别急着说别人不懂了,您说的也不咋对,甚至可以说是谬之千里。猛将兄 写了: 我想楼主可能不太懂可执行文件是怎么回事。其实现代操作系统支持的可执行文件,都是一个中间介质,不包含直接的机器码。由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 次。