本帖最后由 penghubingzhou 于 2020-4-11 22:48 编辑
最近Intel无线网卡驱动有重大突破,根据https://bbs.pcbeta.com/viewthread-1838489-1-1.html,现已支持WPA-PSK/WPA2-PSK加密。先感谢所有Intel无线网卡驱动的贡献者,是他们逐渐打破了“Intel WiFI无解”的刻板印象。然而在反编译最新的4月11日a565109863发布的驱动后,我发现了比较多的代码借鉴现象,而且作者a565109863并没有声明这些涉嫌抄袭代码的来源。下面是详细阐述。
首先声明,我并无对a565109863或其他驱动作者有任何恶意,众所周知,目前我们用的大部分黑果驱动都是由Acidanthera团队提供的,而他们都是秉持着开源精神[1]并注重知识产权。希望远景和大家能帮忙创造属于国内的友好开源环境,鼓励更多开发者来提供改善黑果体验的驱动。
疑点1: taskq_init方法和taskq_create方法涉嫌拷贝zxystd的itlwm项目[2]
在使用ida反编译并分析symbol后,我发现AppleIntelWiFi所使用的taskq方法与itlwm的taskq方法有着极高的相似度。
如图,左侧为itlwm的taskq相关方法,右侧为AppleIntelWiFi反编译结果。对比下来不难发现,AppleIntelWiFi使用了与itlwm.taskq方法里一模一样的逻辑,甚至方法名都一样。这个方法疑似完全照搬自itlwm项目https://github.com/zxystd/itlwm/blob/7815cabeff49cae9fac482b7395c95c606cc7f18/itlwm/compat/openbsd/sys/_task.cpp#L200
- struct taskq *
- taskq_create(const char *name, unsigned int nthreads, int ipl,
- unsigned int flags)
- {
- struct taskq *tq;
- tq = (struct taskq *)IOMalloc(sizeof(*tq));
- if (tq == NULL)
- return (NULL);
- tq->tq_state = TQ_S_CREATED;
- tq->tq_running = 0;
- tq->tq_waiting = 0;
- tq->tq_nthreads = nthreads;
- tq->tq_name = name;
- tq->tq_flags = flags;
- tq->tq_attr = lck_attr_alloc_init();
- tq->tq_grp_attr = lck_grp_attr_alloc_init();
- tq->tq_grp = lck_grp_alloc_init("taskq", tq->tq_grp_attr);
- tq->tq_mtx = lck_mtx_alloc_init(tq->tq_grp, tq->tq_attr);
- // mtx_init_flags(&tq->tq_mtx, ipl, name, 0);
- TAILQ_INIT(&tq->tq_worklist);
- thread_t new_thread;
- /* try to create a thread to guarantee that tasks will be serviced */
- kernel_thread_start((thread_continue_t)taskq_create_thread, tq, &new_thread);
- return (tq);
- }
复制代码
疑点2: timeout_set 方法与itlwm项目里的基本一致
唯一区别是AppleIntelWifi作者改了个名字,加了个by name
疑点其实还有很多,许多全局变量名都与itlwm里的惊人的相似,比如__fWorkloop。VoodooTimeout那一块还使用了mercurysquad的Voodoo80211项目[3]里的相应方法,而原作者声明了BSD 2-Clause协议。
Intel无线网卡驱动移植到mac平台确实难,并且费时,不少人前仆后继投入到了这个项目,去反编译80211协议等等。毋庸置疑,目前AppleIntelWiFi取得的成就是巨大的,但是它其实是基于无数人的努力和心血。没有人愿意自己的成果被直接取走而且不留声明,希望a565109863遵守开源社区GPL-2.0协议,在使用受GPL-2.0协议保护的代码后必须也使用GPL协议并且必须声明变动。我看到作者也在Github上也发布了驱动https://github.com/a565109863/AppleIntelWiFi_Debug,根据GPL协议,在社区上发布后需要公开源代码。
[1] Acidanthera团队的git链接是https://github.com/acidanthera,他们使用的开源声明有BSD-2-Clause,BSD-3-Clause,GPL-2.0等等,驱动源码完全透明。
[2] itlwm也是一个Intel WiFi驱动,它是开源的,可在https://github.com/zxystd/itlwm上查看源码。作者zxystd声明了GPL-2.0协议,拷贝了代码的人必须也使用GPL协议并且必须声明变动。拷贝代码者在发布驱动后还需要公布源代码。
[3]Voodoo80211项目地址:https://github.com/mercurysquad/Voodoo80211
|