某 v2er 做的 App 代码关键部分可能不是基于 LocalSend 改的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
othercat
V2EX    分享发现

某 v2er 做的 App 代码关键部分可能不是基于 LocalSend 改的

  •  
  •   othercat 2024-06-25 14:19:35 +08:00 2566 次点击
    这是一个创建于 476 天前的主题,其中的信息可能已经有所发展或是发生改变。

    起因是看到 这个帖子 https://v2ex.com/t/1052120

    然后我好奇做了一些事情 (之前用的图是 Dropbox 但是 V2EX 可能不支持,现在换成 imgur 的)

    即把原作者 @LuLiangDev 的 Airclap v1.2.0 的 Frameworks 替换掉了 手头 v1.14.0 的 LocalSend

    这样显示效果是被我吐槽是一个 Airclap v1.14.0

    但是考虑到 Flutter 架构其实就是方便前端 UI 替换,所以根本考虑是否基于 LocalSend 修改还是要看行为

    例如原作者 在 https://v2ex.com/t/1051102 提到

    基于 SSDP 深度定制发现协议和 P2P 安全传输协议,利用多链路传输技术,保证数据不丢包, 安全稳定并且高速传输 

    所以和朋友一起研究了一下

    首先先确保 LocalSend 的发现协议是基于 https://github.com/localsend/protocol 所说的私有协议

    The default multicast group is 224.0.0.0/24 because some Android devices reject any other multicast group. Multicast (UDP) Port: 53317 Address: 224.0.0.167 

    那么通过 WireShark 抓包的确能看到是这样的

    那么我们替换之后的新 Airclap v1.2.0 到底是和 LocalSend 一致,还是和作者所说的一致呢?

    通过抓包发现

    因为 SSDP 一般使用多播地址 239.255.255.250 和 UDP 端口号 1900 ,所以可以认为作者说的符合他自己的描述

    后续就不用特别研究了,因为至少目前为止,Airclap 表现的行为,和作者在发布的描述是一致的,而且的确是和 LocalSend 区别很大的

    所以可以认为,@LuLiangDev 的 Airclap ,代码关键部分可能不是基于 LocalSend 改的。

    以上。

    17 条回复    2024-06-27 01:49:04 +08:00
    Goooooos
        1
    Goooooos  
       2024-06-25 14:28:03 +08:00
    人们更愿意相信自己认为的,所以你这贴没啥用,只有作者完全开放源代码,就像电影《让子弹飞》里的老六为了证明自己只吃了一碗凉粉。
    但作为一个付费 APP ,作者肯定不会开放源码。
    othercat
        2
    othercat  
    OP
       2024-06-25 14:31:00 +08:00
    @Goooooos 所以我只是说关键代码不是基于 LocalSend 修改,因为协议层实现比 UI 还是要复杂得多(当然不一定比 LocalSend 更优雅或者安全)

    我相信通过替换 Framework 可以直接使用,应该是有借鉴 Flutter 层面相关代码的,但是由于关键功能的协议层自己有实现,因此作者认为自己没有抄袭可能也有他自己的道理。
    w568w
        3
    w568w  
       2024-06-25 14:43:10 +08:00   2
    大家关心的问题不在于「抄没抄」,而是「遵没遵守协议」。不要打烟雾弹。

    LocalSend 使用的 MIT 协议本来就是允许抄、欢迎抄的。退一万步说,就算他抄了,抄袭不可耻,闭源也不可耻,盈利更没有违反任何协议,完全是他的营销本事。

    现在的关键是:他是否基于 LocalSend 代码二次开发,以及是否履行 MIT 协议。

    其项目源代码结构被逆向工程发现和 LocalSend 的目录结构、文件名完全一致,这基本确定是基于 LocalSend 源代码。然而其三番五次声称自己和 LocalSend 「没有任何关系」,也没有看到任何协议标注和版权署名,这才是问题所在。

    至于核心代码如何变化,我想这并非目前的重点。SSDP Flutter 方面的库也很多很成熟了,LocalSend 的 Provider 架构写得很好,加个协议只是复制粘贴的时间。
    w568w
        4
    w568w  
       2024-06-25 14:45:39 +08:00
    @w568w 注:第一句没有说楼主故意混淆视听的意思。
    othercat
        5
    othercat  
    OP
       2024-06-25 14:48:08 +08:00
    @w568w 没有打烟雾弹,只是描述一个事实。因为 Flutter UI 实在太好替换和借鉴,而 LocalSend 的代码结构说实话因为写的太规范,所以也可以认为有规范的人都可以写的相似。

    目录结构现在我只看到大家借鉴的是主程序部分,但是主程序说老实话,只有 UI ,因为协议层都不在这里。

    因此这部分我仔细看了一下引用的几个核心网络层面 Framework 的实现,其实有很多和 LocalSend 引用的不同,当然因为闭源很难证明,我也没精力和兴趣去证明。

    我只想表达,协议层面自己造轮子实现,如果用 LocalSend 的代码二次开发,可能会更痛苦。
    othercat
        6
    othercat  
    OP
       2024-06-25 14:59:44 +08:00
    @w568w 补充一点我自己个人的猜测,仅仅是猜测:

    作者是基于 LocalSend 的代码结构还有设计思路,自己修改了 UI ,同时自己实现了他描述当中的核心功能协议替换。

    另外大家逆向的看到的主要还是基于 Flutter 打包的结构,这个结构可能写的规范的人都差不多,很难证明什么。
    w568w
        7
    w568w  
       2024-06-25 15:00:36 +08:00
    @othercat #5

    > 认为有规范的人都可以写的相似

    所有文件名都相似的概率太低了。我是 Flutter 开发者,我很清楚至少在列出的那些文件名上,并没有听说过什么「规范」。

    > 主程序说老实话,只有 UI ,因为协议层都不在这里

    协议层可以就在这里。请不要把 Flutter 当成 HTML 那样的前端标记语言,它没有什么「主程序」、「前端」、「后端」的概念,编写一个操作系统模拟器都不在话下,实现一个网络协议还是非常容易的。

    例如,LocalSend 的协议实现就是纯 Dart 编写的。

    > 协议层面自己造轮子实现,如果用 LocalSend 的代码二次开发

    「二次开发」的意思你可能弄错了。并不是必须全部代码照搬,自己一行都不写,然后改两行加上「 VIP 充值」按钮才叫「二次开发」,理论上借鉴(即:再演绎)任何代码全都是「二次开发」。既然是二次开发,就必须遵守协议。

    再强调一次:关心的重点不是「抄不抄袭」,抄袭本来就是一个感情用事的词语。
    body007
        8
    body007  
       2024-06-25 15:10:42 +08:00
    @othercat #6 作者是真不怕影响销量,也不出来说两句。结果我们一群吃瓜群众来回拉扯,这样一闹,知道的或以前不知道的都要去用 localsend 咯
    othercat
        9
    othercat  
    OP
       2024-06-25 15:11:09 +08:00
    @w568w

    > 例如,LocalSend 的协议实现就是纯 Dart 编写的。

    是啊,都能看到 LocalSend 的协议实现是纯 Dart 编写了,其实也可以大概判断出如果不用这些协议,使用其他 SSDP 到底是自己造轮子方便,还是借鉴代码方便了吧。

    > 协议层可以就在这里。请不要把 Flutter 当成 HTML 那样的前端标记语言,它没有什么「主程序」、「前端」、「后端」的概念,编写一个操作系统模拟器都不在话下,实现一个网络协议还是非常容易的。

    我说的协议层指的是 cocoapods 包这些东西,核心在这里,而不是 LocalSend 代码。简单来说,我 WireShark 抓包的内容,并不在 LocalSend 主程序实现,而是在 cocoapods 里面实现的
    具体而言,可能是 https://github.com/localsend/localsend/blob/main/app/macos/Podfile.lock 这里面的

    ```
    Reachability
    network_info_plus
    connectivity_plus
    ```

    等等。

    如果这些东西两者调用实现都不同,而仅仅是中间层调用 API 相似,这。。。
    othercat
        10
    othercat  
    OP
       2024-06-25 15:18:22 +08:00   1
    @body007 我个人看法:

    1. 代码结构和思路肯定是借鉴 LocalSend 的,多加一个 致敬声明 就没事了,但是自己觉得 UI 和协议都是我自己写的,我只是借鉴了思路和代码框架,为啥要声明,哈哈

    2. 具体协议层,就 macOS 上来说,LocalSend 自己用 Pod 的一些现成轮子组成的私有协议,和作者用另外一组 Pod 的的一些现成轮子组成的自己的另外的标准协议实现,后者算不算抄袭或借鉴,我觉得很难。

    3. 我个人来说,LocalSend ,除了在雷电 3 ,4 组雷雳网桥的性能极差(可能是一些变量没考虑 20Gbps 的传输带宽之外),其他层面 LocalSend 就够了。毕竟用一直用 SSDP 真的会比目前 LocalSend 这个协议耗电。
    othercat
        11
    othercat  
    OP
       2024-06-25 15:18:56 +08:00
    上面说的 “但是自己觉得 UI 和协议都是我自己写的” -> ",但是作者肯定自己觉得 UI 和协议都是我自己写的"
    w568w
        12
    w568w  
       2024-06-25 15:21:03 +08:00
    @othercat #9

    > 大概判断出如果不用这些协议,使用其他 SSDP 到底是自己造轮子方便,还是借鉴代码方便了吧

    你的逻辑我似乎没理解。要实现一个协议,除了「造轮子」和「借鉴代码」,还有一个选项是「调库」。我最后提的是调库最方便。

    另外,我再强调一次:这不是重点…… 以下讨论我们就按你的来,默认全部是他自己写的好了。

    > cocoapods 包这些东西,核心在这里

    核心多半不在这里,网络请求 API 在 Dart Runtime 本身就有,为什么要依赖三方库?

    > 在 cocoapods 里面实现的

    我对比了 LocalSend 和 AirClap 的依赖原生库(即你说的 cocapods 依赖库)。很遗憾,所有库我都用过,并没有哪个和 UDP 有特别的关系。你列出的几个都是获取平台信息的,比如 WiFi 名称、5G 情况、检查是否联网等。

    其次明确一点,这里不是他的依赖库列表,充其量是个子集。你可以再看看 Flutter packages 依赖进入打包的过程。
    28Sv0ngQfIE7Yloe
        13
    28Sv0ngQfIE7Yloe  
       2024-06-25 15:23:01 +08:00
    他这个 UI 还挺好看的。
    othercat
        14
    othercat  
    OP
       2024-06-25 15:26:07 +08:00
    @w568w 哎,我觉得重复回复人也累,哈哈, 参考我 10 楼的回复吧,就这样了。
    beimenjun
        15
    beimenjun  
    PRO
       2024-06-25 15:44:55 +08:00   2
    首先我觉得应该有个共识:

    1. 基于 localsend 开发,不代表就不能自己做修改了。

    2. 做了修改,不代表就不是基于 localsend 开发。

    脱离了这两点就没啥好讨论了。

    另外我的指责再说一遍:他这个 App 参考了很多 localsend 的代码(事实也是如此),稍微致谢里也该说一下吧?为什么还要撇清关系,好像完全没从这个开源项目获益一样。
    zagfai
        16
    zagfai  
       2024-06-25 20:34:08 +08:00
    @othercat 我感觉 w568w 不是很懂,在装懂:)
    w568w
        17
    w568w  
       2024-06-27 01:49:04 +08:00 via Android
    @zagfai 我是不是不懂装懂点进 github 个人主页就看到了,还是说必须是 flutter core dev 才能说话?

    有错请直接指出我的错误,阴阳怪气真的很没意思。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2908 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 14:27 PVG 22:27 LAX 07:27 JFK 10:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86