V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LonnyWong
V2EX  ›  推广

在升级到 go1.21 与兼容 Win7 之间,你会如何选择?

  •  
  •   LonnyWong · 2024-07-08 08:25:30 +08:00 · 9669 次点击
    这是一个创建于 425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    决策

    • tssh 升级到 go1.21 是迟早的事,不能因为部分不升级的用户,而影响了其他愿意升级的用户。后来想到,可以在 release 时,通过 github action 将 QUIC 和 KCP 协议降到支持 go1.20 的版本,然后编译出能在 Win7 运行的专用版本,详见 https://github.com/trzsz/trzsz-ssh/blob/main/.github/workflows/publish.yml

    • Win7 用户可以在 https://github.com/trzsz/trzsz-ssh/releases 下载带 win7 关键字的版本,在 Cygwin 、MSYS2 或 Git Bash 内使用。个人建议,别再用 Win7 了,尽早升级吧,新版本 Windows 更香和更安全。

    讨论

    • 你开发软件时,会紧跟当前最新的编译器版本吗?如 Go 。

    • 你开发的软件,会支持市场已放弃的旧系统吗?如 Win7 。

    第 1 条附言  ·  2024-07-09 17:25:27 +08:00

    既然说是推广,那就加点推广内容吧:

    tssh 作为 ssh 客户端的替代品,除了兼容 ssh 外,支持很多原生 ssh 没有的功能 https://github.com/trzsz/trzsz-ssh#extra-features ,欢迎大家体验。 tssh

    73 条回复    2024-07-09 08:46:03 +08:00
    baozhibo
        1
    baozhibo  
       2024-07-08 08:28:23 +08:00
    选择 go1.21 ,现在很多网站都不支持 IE 了,一样的道理。
    ixixi
        2
    ixixi  
       2024-07-08 08:29:38 +08:00
    我没有需要伺候的这么好的客户 😭
    afxcn
        3
    afxcn  
       2024-07-08 08:31:30 +08:00
    为什么一定要升 go1.21,有什么好处?

    我还在用 go 1.18
    dfkjgklfdjg
        4
    dfkjgklfdjg  
       2024-07-08 08:37:03 +08:00
    1. 不会,一般会使用 LTS 版本,
    2. 不会,默认不考虑已经结束维护周期的兼容,除非确定有关键用户在使用旧版本。

    从 10 年前开始新的 win 设备默认就是安装的 win10 。这两年开始默认 win11 了。
    所以看你的客户群体是什么。其实取舍的问题,投入的精力是否会带回来足够的回报。
    beginor
        5
    beginor  
       2024-07-08 08:39:19 +08:00 via Android
    是否升级,取决于有多少付费用户还在使用 win7 ,能带来多少收入。

    如果有,旧版本又不是不能用,如果没有,为啥不升级呢?
    huangzhiyia
        6
    huangzhiyia  
       2024-07-08 08:44:07 +08:00   ❤️ 1
    1. 不会即时跟上,起码半年后再更新。
    2. 旧系统用户给钱了吗?不给不更新,愿意给钱的用户大概率有钱换新电脑了,剩下用不被支持的系统的愿意给钱的用户,那几个钱需要考虑是否值得有精力去维护?

    对待那些始终使用旧系统的群体,最好的办法就是出一个公告,上游 xxx 不再支持 xx 系统,然后说没有那么精力维护 xx 系统,但是考虑部分用户的需求,xx 系统版本的软件将以收费的形式提供,建议用户升级系统继续免费使用。巴拉巴拉吧
    LonnyWong
        7
    LonnyWong  
    OP
       2024-07-08 08:53:49 +08:00
    @afxcn #3 新版本往往会带来新特性,有些代码写起来会优雅很多。KCP 协议是用了 go1.21 的 clear 方法,避免了原来要 copy 内存的写法。QUIC 协议是只支持 go 最新的两个版本,当前也就是 go1.21 和 go1.22 ,用 go1.20 是编译不过的了,具体我没细看。
    BeautifulSoap
        8
    BeautifulSoap  
       2024-07-08 08:54:29 +08:00 via Android   ❤️ 9
    仔细一看,这帖子应该发到推广节点吧。看是讨论问题实际上是在宣传自己项目。。。

    非收费项目的话,留下最后一个 win7 支持的版本,然后出的版本不再支持 win7 ,想要用新版本新功能就让他升级系统呗
    vocaloid
        9
    vocaloid  
       2024-07-08 08:55:59 +08:00
    这俩问题都取决于你公司和客户的要求,如果没有其他要求那肯定是哪个方便哪个来

    不过我个人开发软件有奇怪的 xp ,会尽可能兼容旧系统
    skuuhui
        10
    skuuhui  
       2024-07-08 08:56:53 +08:00
    你坚持使用 win7 的原因是什么
    LonnyWong
        11
    LonnyWong  
    OP
       2024-07-08 08:57:54 +08:00
    @BeautifulSoap #8 你要这么说,我也不反驳。我也就看看大家是如何做的,决定一个放弃 Win7 的时间。
    kokutou
        12
    kokutou  
       2024-07-08 08:58:30 +08:00
    你实际试过 win7 吗....
    就算是打了最新的补丁, 打了 esr 补丁,
    也还是好多软件都没法用的...
    0o0O0o0O0o
        13
    0o0O0o0O0o  
       2024-07-08 09:00:29 +08:00 via iPhone
    希望免费开源软件能激进点
    dode
        14
    dode  
       2024-07-08 09:03:04 +08:00
    文档说明 win7 自己可以用旧版程序
    LonnyWong
        15
    LonnyWong  
    OP
       2024-07-08 09:05:00 +08:00
    @skuuhui #10 我不用 Win7 ,只是有部分用户用,详见 issue:

    https://github.com/trzsz/trzsz-ssh/issues/13

    https://github.com/trzsz/trzsz-ssh/issues/22
    LonnyWong
        16
    LonnyWong  
    OP
       2024-07-08 09:07:02 +08:00
    @kokutou #12 我会用 Win7 测试过的,在 Cygwin 、MSYS2 或 Git Bash 内,是可以用的,遇到的问题也做了兼容。
    LuckyLauncher
        17
    LuckyLauncher  
       2024-07-08 09:13:21 +08:00
    给钱就兼容,一直给钱就一直兼容
    没钱爱用用,不用拉倒
    LonnyWong
        18
    LonnyWong  
    OP
       2024-07-08 09:13:26 +08:00
    @0o0O0o0O0o #13 都是权衡,一边是与时俱进,一边是近 1 / 5 的 Windows 用户。
    afxcn
        19
    afxcn  
       2024-07-08 09:14:08 +08:00
    谢谢 #7

    那就必需要升级了,我升到 1.18 也是为了用 any ,以前一直用的 1.13 的,自己定义了个 Any ,自己定义的 Any 用起来还是不方便。
    LonnyWong
        20
    LonnyWong  
    OP
       2024-07-08 09:18:08 +08:00
    @LuckyLauncher #17 纯用爱发电!但也是爱用就用,无所谓。
    tool2dx
        21
    tool2dx  
       2024-07-08 09:20:27 +08:00
    我还在用 win7 ,使用存量老硬件的用户,一般来说是不太会主动升级操作系统的。除非换新的硬件,买新电脑。
    wwqgtxx
        22
    wwqgtxx  
       2024-07-08 09:22:37 +08:00   ❤️ 8
    我选择在编译的时候给 golang 打 patch ,对于 golang1.21 撤销掉一个 commit 即可恢复对 win7 的支持
    https://github.com/golang/go/commit/9e43850a3298a9b8b1162ba0033d4c53f8637571
    如果需要对 win7 打 KB2533623 之前的版本做兼容,那就再撤回一个 commit
    https://github.com/golang/go/commit/a17d959debdb04cd550016a3501dd09d50cd62e7
    enihcam
        25
    enihcam  
       2024-07-08 09:38:01 +08:00 via Android
    投入到 win7 兼容的收益一定是临时的、短暂的。从投资角度讲,不要做逆时间线的工作,比如 win7 用户早晚会升级,不管是主动还是倒逼。
    LonnyWong
        26
    LonnyWong  
    OP
       2024-07-08 09:38:25 +08:00
    @wwqgtxx @0o0O0o0O0o #22 #24 感谢两位大佬!这种做法比我的好多了。
    zackzergzeng
        27
    zackzergzeng  
       2024-07-08 09:40:32 +08:00
    @LonnyWong #7 新版本也往往带来新鲜的安全漏洞
    LonnyWong
        28
    LonnyWong  
    OP
       2024-07-08 09:42:20 +08:00
    @zackzergzeng #27 旧版本可能更可怕,明知安全漏洞而不修。
    tool2dx
        29
    tool2dx  
       2024-07-08 09:44:16 +08:00
    @enihcam 用户升级 win10 的背后逻辑,并不是软件升级,而是硬件升级。

    但是电脑硬件这东西,很难坏掉或者自然淘汰,特别是企业里的老电脑。

    几年后估计还是 20% win7 占比,因为电脑没坏。如果一定要开发者选择,只能放弃这部分用户。
    NX2023
        30
    NX2023  
       2024-07-08 09:45:44 +08:00 via iPhone
    @baozhibo 正确的,Steam 都不支持 windows7 了,没必要惯着
    milukun
        31
    milukun  
       2024-07-08 09:45:46 +08:00
    虽然 ios 和 macos 也经常挨骂,但是忽悠用户升级还有便于升级这点,真的没话说
    做这些相关的 app 根本不用过于考虑低版本,甚至低版本不作为目标用户即可
    但 win7 是真的顽固啊
    enihcam
        32
    enihcam  
       2024-07-08 09:45:53 +08:00
    @tool2dx 硬件不值钱。
    zackzergzeng
        33
    zackzergzeng  
       2024-07-08 09:46:51 +08:00
    做 toB 做定制,客户用 window 98 也得兼容
    做 toC 就自由了,方便兼容就做,不方便该放弃就放弃
    cheneydog
        34
    cheneydog  
       2024-07-08 09:49:53 +08:00
    @wwqgtxx #22 大佬,golang 增加了什么特性 win7 支持不了?为啥一个编程语言要这么激进的限定操作系统版本?
    zackzergzeng
        35
    zackzergzeng  
       2024-07-08 09:50:33 +08:00
    @LonnyWong #28 我遇到过新特性带来的新漏洞,旧版本没漏洞的;我也遇到过旧版本有漏洞,新版本新特性就没漏洞的。反正升级不升级都挺麻烦的🤣
    wwqgtxx
        36
    wwqgtxx  
       2024-07-08 09:50:52 +08:00
    还有一些比较麻烦的方法,比如手动分叉一些需要高版本 golang 的依赖,恢复对旧版的支持
    https://github.com/MetaCubeX/randv2
    https://github.com/MetaCubeX/quic-go/tree/v0.45.0-mod-meta
    https://github.com/MetaCubeX/gvisor/tree/meta-20240320-6368c171a198
    当然这种做法有点费力不讨好
    wwqgtxx
        37
    wwqgtxx  
       2024-07-08 09:53:28 +08:00   ❤️ 5
    @cheneydog #34 其实只是精简掉了旧的兼容 win7 支持的代码而已,毕竟微软都宣布 EOL 了,golang 官方也没有足够的精力维持兼容性
    pkoukk
        38
    pkoukk  
       2024-07-08 10:04:16 +08:00
    咋不考虑兼容 XP 呢?我记得 win10 刚出的时候还有好多 XP 钉子户呢
    该升还是升吧,这些所谓的钉子户也钉不了几年了
    feiyan35488
        39
    feiyan35488  
       2024-07-08 10:04:35 +08:00
    收费软件,需要尽可能满足用户需求
    开源软件则不需要
    LonnyWong
        40
    LonnyWong  
    OP
       2024-07-08 10:14:27 +08:00
    @pkoukk #38 XP 不到 2% ,Win7 是 22%,换句话说,每 5 个 Windows 用户就有一个是 Win7 用户。

    https://gs.statcounter.com/windows-version-market-share/desktop/china

    如果可以支持,又不是特别的麻烦,又何乐而不为呢?本来就是用爱发电,不单单只是取悦自己了。
    augustheart
        41
    augustheart  
       2024-07-08 10:22:22 +08:00
    如果是作为一个稳定的产品,在足够满足需要的情况下,没任何必要升级编译器。
    甚至是有漏洞的类库也可以酌情不升级
    PiersSoCool
        42
    PiersSoCool  
       2024-07-08 10:35:48 +08:00
    让客户给钱,或者让他自己升级;或者给他写个 sleep 10 ,告诉他 win10 性能更好,结束了
    janus77
        43
    janus77  
       2024-07-08 10:36:49 +08:00
    跟 windows 本身一样,多版本共存不就行了,一个老版本还支持 win7 ,但不再发布新功能更新,只有必要的安全更新,新版本正常更新,并不再兼容 win7 。
    loolac
        44
    loolac  
       2024-07-08 10:41:25 +08:00
    22% 的 win7 用户中有多少是 tssh 用户呢?使用 win7 的估计都用不到 tssh ,最起码我感觉从事开发,运维等人员不会还在用 win7 了吧。
    LonnyWong
        45
    LonnyWong  
    OP
       2024-07-08 10:45:25 +08:00
    @loolac #44 不好说,没统计,也不会加任何统计的功能。不过,早期不支持 Win7 时,是产生了 2 个 issue 。
    cshwen
        46
    cshwen  
       2024-07-08 10:58:47 +08:00
    支持 Win7 ,得加钱
    liuliuliuliu
        47
    liuliuliuliu  
    PRO
       2024-07-08 11:04:17 +08:00
    不是,你不先看看这部分 win7 用户是不是你的目标用户群体啊?你这软件明显是要放弃这些人的。
    总结:你这明显就是一篇软广
    LonnyWong
        48
    LonnyWong  
    OP
       2024-07-08 11:21:18 +08:00
    @nikenidage1 #47 我放弃了吗?不是编译出了 Win7 专用的版本?感谢 #22 wwqgtxx 大佬的回复,让我找到了更好的支持 Win7 的办法。
    你要坚持是“软广”,那就是吧。我是写了个开源软件,遇到了个问题,也想到了个解决办法(不是很好的办法)。所幸,因为这个贴子,让我找到了更好的办法。“软广”就“软广”吧,无所谓。
    0o0O0o0O0o
        49
    0o0O0o0O0o  
       2024-07-08 11:27:11 +08:00 via iPhone   ❤️ 1
    @nikenidage1 #47
    @BeautifulSoap #8

    这算推广吗?我怎么读不出来,OP 有思考有作品,言之有物,还属于不获利的开源项目,就算有宣传自己项目的考虑,也不该放到推广 /go/promotions 这个言“商”的节点。换作是我我也会犹豫,因为要么选择发在分享创造 /go/create ,但又担心无人将它视作一个疑问来解答。综上我认为 OP 发在这里没有什么不妥。
    BeautifulSoap
        50
    BeautifulSoap  
       2024-07-08 11:37:40 +08:00
    @0o0O0o0O0o 我觉得是在变相宣传自己的项目。当然,有点的确搞错了,我不知道推广节点是放商业项目的地方。相比之下这个帖子的确应该放到推广个人开源项目的节点
    liuguang
        51
    liuguang  
       2024-07-08 11:40:29 +08:00
    go 一般都是搞服务端开发的,难道你用 go 写桌面程序?
    LonnyWong
        52
    LonnyWong  
    OP
       2024-07-08 11:41:47 +08:00
    @liuguang #91 go 写的 cli 程序
    BeautifulSoap
        53
    BeautifulSoap  
       2024-07-08 11:47:13 +08:00
    @0o0O0o0O0o 如果你认为这种在技术讨论帖子里插入很多对个人项目的软性介绍不算宣传的话,那么是不是意味着,任何一个项目开发者想宣传自己的项目的话,那就隔三岔五随便找个项目开发时遇到的技术问题仍到技术讨论节点(帖子用和 lz 一样的写法)是正常的呢?
    LonnyWong
        54
    LonnyWong  
    OP
       2024-07-08 11:53:27 +08:00
    @BeautifulSoap #90 我是在背景中讲了我的项目,因为升级 go1.21 不是心血来潮的,是有原因的。另外,我在 V2 也基本只讲与我项目有关的事情,一是能引起我兴趣的话题不多,二是我不想(也不敢)参与其他敏感话题,因为我算是半实名了(有关部门能查到我是谁)。最后,花了大力气写出来的东西,有人用也就足够了,不求 star ,更不求打赏。
    0o0O0o0O0o
        55
    0o0O0o0O0o  
       2024-07-08 12:06:21 +08:00 via iPhone   ❤️ 1
    @BeautifulSoap #53 我觉得可以参考 hackernews https://news.ycombinator.com/newsguidelines.html

    保持好奇心、有自己的思考、有实质内容,如果你说的这些开发者可以隔三岔五但持续地对人们展示这点,我觉得**完全没有问题**。例如我正在阅读的:

    https://news.ycombinator.com/from?site=thegreenplace.net
    panda1001
        56
    panda1001  
       2024-07-08 13:51:19 +08:00 via Android
    在 github 上看到 go 取消 win7 支持,解释是 ci 没有 win7 的机器不好做测试
    ExplodingFKL
        57
    ExplodingFKL  
       2024-07-08 13:51:55 +08:00
    无需考虑太过陈旧环境的用户了,针对这部分用户开一个单独的分支仅修复漏洞即可,又不是商业软件,没必要保证太强的兼容性
    suyuyu
        58
    suyuyu  
       2024-07-08 14:13:47 +08:00
    go 都放弃 win7 了你还要支持 (
    4Et5ShxMIq58n6Lr
        59
    4Et5ShxMIq58n6Lr  
       2024-07-08 14:15:45 +08:00
    推广就推广,整这么多事
    duluosheng
        60
    duluosheng  
       2024-07-08 14:19:07 +08:00
    单独给 Windows 7 增加一个打包
    charslee013
        61
    charslee013  
       2024-07-08 17:04:37 +08:00
    一般来讲当决定选用某个软件的时候就已经确定该功能是符合需求的,很少为了某个新功能而对系统进行升级
    Yadomin
        62
    Yadomin  
       2024-07-08 17:11:10 +08:00 via Android
    建议加个遥测看看你到底有多少 Win7 用户
    kero991
        63
    kero991  
       2024-07-08 17:17:14 +08:00
    说那么多,我觉得你得先搞清楚一件事,你是乙方(甲方用 go 我不理解)
    既然你是乙方,用什么,兼不兼容 win7 真的是你决定的吗?
    我们这省一级机关,除了信创 linux 机器,win 机器 99.99%都是 win7 ,有单子你不接?
    LonnyWong
        64
    LonnyWong  
    OP
       2024-07-08 17:17:15 +08:00
    @Yadomin #62 ssh 是特别敏感的工具,不会加任何统计和上报之类的,避免让人误会。
    HFX3389
        65
    HFX3389  
       2024-07-08 17:39:36 +08:00
    @0o0O0o0O0o
    @wwqgtxx
    6 哇,这咋知道的,我也在为 Go 1.22 支持 Win7 发愁还想着要不要改一份 Go 1.20 版本的代码,谢谢两位啦~~
    HFX3389
        66
    HFX3389  
       2024-07-08 17:41:43 +08:00
    @enihcam #32 但是要让用户掏,用户就觉得硬件值钱,很多老电脑跑 Win7 的原因就是没固态硬盘,单位/公司又不给买,用电脑的人又不愿意自己掏钱买 SATA 固态...那就只能跑 Win7 咯..
    HFX3389
        67
    HFX3389  
       2024-07-08 17:49:06 +08:00
    @kero991 #63 甲方用啥? Java 吗
    HFX3389
        68
    HFX3389  
       2024-07-08 17:49:34 +08:00
    @panda1001 #56 上虚拟机:D
    enihcam
        69
    enihcam  
       2024-07-08 17:57:07 +08:00
    @HFX3389 那就别跑 go 咯,gw-basic 了解下。
    lysShub
        70
    lysShub  
       2024-07-08 18:35:04 +08:00
    @0o0O0o0O0o
    @wwqgtxx 这种撤回方式是不是只能在较近几个版本上才有效啊
    wwqgtxx
        71
    wwqgtxx  
       2024-07-08 22:18:01 +08:00   ❤️ 1
    @HFX3389 #65 自然是对着 golang 仓库一个 commit 一个 commit 翻找相关的,然后撤回后在 win7 上实验能不能正常运行喽

    @lysShub #70 我在代码中也留了注释,这种撤回方法还是需要对特定版本进行适配的,不过从我这边的 github action 来看,直到最新的 golang1.21.11 和 1.22.4 上工作都是正常的
    至于为什么 action 中 1.21 系列是直接从 golang 官方仓库取 diff ,而 1.22 自己放了一份 patch 文件就是因为 1.22 的修改需要额外修改一些对应行数才能正常撤回
    如果想应用到未来发布的 1.23 那肯定还是要重新写 patch 的
    just1
        72
    just1  
       2024-07-09 00:53:49 +08:00
    我比较激进,公司内我维护的项目都是跟随 PATCH version 的。MINOR version 会慢一两个月等待 1~2 个 PATCH version 。因为确实有很多功能或者修复是被需要的(这句话不仅仅是针对 go ,很多依赖都是)。
    zfyStars
        73
    zfyStars  
       2024-07-09 08:46:03 +08:00
    如何选择 快十年没用 win7 了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3101 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:17 · PVG 08:17 · LAX 17:17 · JFK 20:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.