C_and_CPP 板


LINE

在这个版谈 Java 会不会被桶? 总之,在开始探讨 API 前,我们先来阅读这篇文章: API 是否应被视为「着作」? 对於 Java 的使用,Oracle 与 Google 打了好几年的官司,两者有 侵权法律纠纷,迟迟未解,其中,API 是否有版权成了关键 文 / 王建兴 http://www.ithome.com.tw/voice/97361 -- 看完上文後,应该对 API 有一个模糊的概念了。 接下来我要开始谈 Google vs Oracle (Sun) 的 Java API 之争。 Google 早期在发展 Android 时,直接选用了 Java 做为开发语言, 这是众所皆知的事情,但问题是 Java (或其他语言) 不可能脱离 Standard Library 开发。例如在 C 语言中,初学者想印出 "Hello, World" 字串,通常都是呼叫 printf() 或 puts() 函数,两者皆 定义於 C Standard Library 中。这两个函数於不同系统中由不同 runtime library 提供,在 Linux 中最常见的便是 glibc 了,但 其实还有 uClibc, musl 等选择。BSD (Unix) 系统多使用 libc。 所以 printf, puts 这类函数在不同作业系统上可能根本是不同的 两个函数。那麽如果不透过 C Standard Library 印出字元要怎麽 做呢?首先你要知道其实你写的程式根本没有对萤幕的存取权。唯 一印出字元的方法是告诉你的作业系统你要印出这个字元,在多数 系统中是透过 software interrupt 转移给 kernel 去做事的。听 不懂没关系,反正这一段的重点是在「library 是可以被替换的」 这件事上。 C Standard Library 实际上是 C 语言的一部份,定义在 ISO 文 件里,所以你可以说 API 是写在语言定义里的,但函式的实作却 不是。而 Java 的情况是,Sun 开发的 Java Platform Standard Edition (J2SE) 提供了绝大多数 Java 开发者会用到的功能,例 如 System.out.printf()。实作 J2SE API 的函式库称为 Java Class Library。与 C 一样的情况,你可以选择 Oracle (Sun) 开 发的 JDK (包含了 JVM 与 JCL),或是改用其他函式库,例如 GNU Classpath, Apache Harmony 与 OpenJDK。其中 Google 的 Android 使用了客制化的 Apache Harmony (後来改用 OpenJDK)。 那为什麽 Oracle 要控告 Google 侵犯它的 J2SE API 着作权呢? 因为 Google 只取了 J2SE API 的一部份,不是全部,导致 J2SE 程式实际上不相容 Android。所以 Google 实际上是将 J2SE 的 API 再制并修改,扼杀了 J2SE 在 Android 平台上使用的可能性。 其实 Sun 有一个专门为行动装置设计的 Java 版本,叫做 J2ME, 例如早期 Nokia 与 SonyErisson 的手机游戏及应用皆是 J2ME, 但不管 J2SE 还是 J2ME 都不能跑在 Android上。要正确地形容 Android 与 Java 的关系,应该是「Android SDK 采用 Java 做为 其开发语言」。所以 Android SDK 中包含了一套从 J2SE 抄来的 API 供 Android 开发者参考,也因此虽然 Android 程式开发时使 用 JDK (Java SE Development Kit),但真正在 Android 装置上 跑的是 Dalvik 虚拟机与一个客制化的 Apache Harmony 函式库( 後来被 Android Runtime 与 OpenJDK 取代)。 所以 API 是由函式库作者提供给你「如何使用我的函式库」的参 考,或是像程式语言的 standard library 一样,由一个组织统一 定义 API,提供函式库作者参考开发,也给程式开发者参考。所以 如果你写了一个函式库,并把 API 公开,即使你享有该函式库着 作权,你却不能阻止 Google 把你的 API 抄去作成另一个东西。(笑) 最後,API 已经不仅仅是指函式库定义了,只要是系统中两个不同 部分(可以是同一个或不同软体)沟通的参考通通都叫 API。例如 一个 client-server 架构的系统,client 去呼叫 server 上预存 的程式,这个过程我们称为 remote procedure call,而如何建立 RPC (例如执行哪个程式,给予甚麽参数) 也是一种 API。现在最流 型的 client-server 架构当属 HTTP,也就是 web,例如 RESTful API, JSON API 等等名词一大堆,或是甚麽 Common Object Request Broker Architecture,Java Remote Method Invocation,通通都 定义了一套 API 让不同语言写成的各种应用程式透过相容的 API 交换资料。上面提到的 C Standard Library、J2SE 甚至也可以用 不是 C 或 Java 的语言开发(不过这牵扯到 ABI 就是了)。本质 上 library 与你的程式也是不同的软体,就算你今天写一个软体是 自己写爽的,没打算给别人用,你在开发过程中也可以自己定义一 套 API,让你在各个不同部分呼叫对方时有一个参考可以看。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.117.198.141
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1497095755.A.CBF.html
1F:推 Qbsuran: write(1, "明明就可以", 5*2); 06/10 20:24
2F:推 wtchen: 光讲Java会被捅, 不过本文跟C有关就没关系 06/10 20:50
3F:推 james732: 我个人觉得google是有点吃Java的豆腐XD 06/11 00:30
4F:推 sunev: 这官司後来怎麽了? 06/11 02:04
5F:→ Chikei: 法官_1:J2SE API太基本,不应受保护->上诉->法官_2:J2SE 06/11 02:51
6F:→ Chikei: API应受保护 (J2SE API是否受保护在此结案)-> Google改用 06/11 02:52
7F:→ Chikei: fair use作为论述来防御案件本身,目前胜诉,但oracle可以 06/11 02:54
8F:→ Chikei: 上诉 06/11 02:54
9F:→ s25g5d4: 一楼那是 POSIX API, 也是另一个通用 API, 提供 Unix 及 06/11 06:44
10F:→ s25g5d4: Unix-like 系统一个统一的系统调用 API 06/11 06:44
11F:→ s25g5d4: 一样也是不同作业系统可能有不同实作,如正统 Unix BSD 06/11 06:46
12F:→ s25g5d4: 及 常见的 Linux 06/11 06:46
13F:→ s25g5d4: 最後也是要透过 software interrupt 转给 kernel 处理 06/11 06:47
14F:推 woo0422: 感谢你的解释,有好多关键字没看过。理解起来感觉像是.h 06/12 02:50
15F:→ woo0422: 是api, source code是library 06/12 02:50
16F:→ woo0422: 另外写这麽久程式 现在才知道原来c语言也是api. 我一直 06/12 02:52
17F:→ woo0422: 以为他是组语定义出来的……… 06/12 02:52
18F:→ s25g5d4: 严格说起来, .h 是给 compiler 看的,我自己比较倾向 06/12 03:59
19F:→ s25g5d4: 把整份 reference 称为 API 啦... 06/12 03:59
20F:→ s25g5d4: 当然如果 .h 档写的跟 reference 一样完整的话也是可以 06/12 03:59
21F:→ s25g5d4: 例如说这个函数在干嘛、要放甚麽参数、参数有甚麽限制、 06/12 04:00
22F:→ s25g5d4: return value 有甚麽意义、会丢出甚麽 exception、有 06/12 04:00
23F:→ s25g5d4: 没有 thread-safe 等等,这些都属於 API 的一部份 06/12 04:00
24F:→ MOONRAKER: C语言怎麽会是API 又怎麽是组语定义出来的 06/12 14:10
25F:→ MOONRAKER: 天阿怎麽看这麽多篇还会得到这种结论 obfuscation大师 06/12 14:10
26F:→ MOONRAKER: 这麽多吗 真是太厉害啦 06/12 14:11
27F:推 CoNsTaR: 其实如果用 metalanguage 的角度来看,object language 06/12 19:45
28F:→ CoNsTaR: 的确是 API 啊 06/12 19:45
29F:→ CoNsTaR: 不过 C/C++ 没有真正的 metalanguage 就是了 06/12 19:45
30F:推 woo0422: sorry. 我在了解一下 谢谢你们 06/13 00:39
31F:推 Lordaeron: 好文! 06/13 17:22







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP