Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) by nld3-dev1.alpinelinux.org (Postfix) with ESMTPS id 42A437818AF for <~alpine/devel@lists.alpinelinux.org>; Sat, 12 Dec 2020 09:36:22 +0000 (UTC) Received: by mail-qt1-f172.google.com with SMTP id b9so8383957qtr.2 for <~alpine/devel@lists.alpinelinux.org>; Sat, 12 Dec 2020 01:36:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=9whNznVsAmkSi71skUAkAqL2kHZ3jho4qUgDlOyAdBs=; b=WGB3iq2k7Dc5pQuzJufC0180Ew4tl3pkj1Jf0D8TrLwtUOy1QpB7SOoun7A3+n/Ik6 yi7W8KF2yNlV6JBir/BH01fHDslaplDCYHWbFciv4wXwOSt9gaKFozxNhgPKIyptcJm6 CLM2SDoYS5E/+qsT4tZJUPf+qECIkB+2iJBKfL/iWmM1Yk1RFjAZIvI3CRviu+NT1QzI nGsP3RGdULVZK3FjqTEU0DaDcXayhVk7sVYYAR3n+kR+7+rWo2y0jyeLtOpXIVPpBFj4 FDjQNfUiHQn3WYALUOTH9s0JzjoyW6JqcZz2JuiIc4kadobi5VszUqsz3qIU5y1llKat ErJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=9whNznVsAmkSi71skUAkAqL2kHZ3jho4qUgDlOyAdBs=; b=Bq9xgwcG8d46BTHhNd86wJ77CHivRVWamT4nNV4swJNz96JGC4TvRapH/nrkyeznxf 4Wg/QR0U47amiP9eSzjiVuIwuAwicaICy0M7gMV+C/WgnheS1GTL0crFLL6rHhpAMbAW qYAAzqY8FL0vbF5p4LszYxsgi6d6+TCn8u36CrXzYsWC7AFuHKmc4bz9vk6iPcTUah6f tuSckMk0Fb0N80r7KuRZxdkz6J9InlVmCHPHKMn/l2PhrMo+nELp50Z3lUChBd3tkeRj yLs8fRLEudxWikufOisyIJjJ8hyQywHKwXp9nbchnBGTJo2wdztz6+1JfynnFXuhA+Gx Okhw== X-Gm-Message-State: AOAM531Po22cu65F33z7ItXUgsfnBmH9YGsPbniGy38tbWs2ascPI1TZ b4S7ysWyixbPXR8bazATfsfTjeU4DQ8= X-Google-Smtp-Source: ABdhPJws0qZx/2ZpgmZ1hCdwyCytSPQciVJPCGf3iXh3k/HajlUaeypvzqLq2Y4hLuDFiRSLhZfJiw== X-Received: by 2002:ac8:714c:: with SMTP id h12mr19530884qtp.361.1607765779775; Sat, 12 Dec 2020 01:36:19 -0800 (PST) Received: from ?IPv6:2804:431:cfcd:535d:f210:c39d:3f15:f2f6? ([2804:431:cfcd:535d:f210:c39d:3f15:f2f6]) by smtp.gmail.com with ESMTPSA id m10sm9324335qtg.52.2020.12.12.01.36.18 for <~alpine/devel@lists.alpinelinux.org> (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 12 Dec 2020 01:36:19 -0800 (PST) To: ~alpine/devel@lists.alpinelinux.org From: maxice8 Subject: Implement versioned names for major libraries to ease upgrade process Message-ID: <86c7a81e-1640-7f82-9e13-dfdbe1aad07b@gmail.com> Date: Sat, 12 Dec 2020 06:36:16 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Hello, Distros like Debian and Void Linux have packages for major version of libraries include the major version in their pkgname (example: libboost1.75). I'd like to implement that for Alpine Linux. ## Benefits to Alpine Ease the upgrade process of major libraries with lots of consumers (like boost that has 127-ish consumers) by allowing 2 or more versions of a library to be installed in parallel. Consumers will no longer need to be rebuilt all at once as users can have multiple versions of the library installed and will be slowly switched over to the new version as consumers are rebuilt to use the new soname. This is already done for llvm which breaks API and ABI every MAJOR release so we keep llvmN and llvmN+1 and remove llvmN once all packages are switched over to use llvmN+1. ## Drawbacks More APKBUILDs will need to be maintained until the whole process is done. If we depend on foo-dev with foo-dev being claimed by the latest version of foo, it becomes possible for some packages to be missed during the upgrade process and never processed until the older foo is removed. Otherwise if we decide on depending on fooX-dev directly then it increases work on upgrading packages but guarantees no package will be missed in the way mentioned above. People might start manually installing fooX instead of installing foo and just getting the latest version and then their system **could possibly** break during an upgrade. ## Workflow First time: 1. Upstream releases a new major version 2. New aport is created that has pkgname that includes the major version and claims common subpackages (-dev, -doc, -openrc, -*sh-completion, etc) via provides="foo-dev=$pkgver-r$pkgrel". 3. Consumers are rebuilt all at once (for the last time) 4. the old aport is removed All following times: 1. Upstream release a new major version 2. New aport is created that has pkgname that includes the major version and claims common subpackages (-dev, -doc, -openrc, -*sh-completion, etc) via provides="foo-dev=$pkgver-r$pkgrel". 3. Old aport is rebuilt without the provides= 4. Consumers are rebuilt as possible/expedient 5. old aport is removed ## Timeline This will be implemented as soon as 3.13 is released and consensus is reached (assuming it is positive) Regards Leo