x86_64/amd64 sqlite3 binaries
Hi! I'm a bit curious that there is no easy way (except compiling from the amalgamation) to get the latest greatest sqlite binaries for amd64. There are only 32-bit precompiled binaries for linux on the [download page](https://www.sqlite.org/download.html). Is it possible to add there amd64 binaries as well? (And what should be done to make it possible?) Thanks, and sorry if this question is stupid. :-)
> (And what should be done to make it possible?) Donating such a machine to the project would be the first step.
Pretty sure the project already has such a machine. AMD64 is the original moniker for x86-64. AMD continued the x86 codebase when Intel decided to change things up with Itanium (IA-64).
Yep, x86-64 is not something exotic. It's just a 64-bit linux, I think it much more popular that 32-bit one nowadays.
Probably project has access to this type of machine, as Fossil has 64-bit build on it's [download page](https://www.fossil-scm.org/home/uv/download.html)
the win64 version build from source is about 30% faster than the win32 version by my testing. ``` with t6(n) as (select 1 union all select n+1 from t where n<6) , b3(a,b,c,bit)as(select a.n,b.n,c.n,(1<<(a.n-1))+(1<<(b.n-1))+(1<<(c.n-1)) from t6 a,t6 b,t6 c where a.n<b.n and b.n<c.n) , b9(b)as(select c.bit*((1<<(r.a-1)*6)+(1<<(r.b-1)*6)+(1<<(r.c-1)*6)) from b3 c,b3 r) , t(n,c,x,y) as(select 1,'1',1,1 union all select n+1,cast(n+1 as varchar),n/6+1,n%6+1 from t where n<6*6) , s(lv,n,nlist,blist,px,py) as(select 1,t.n,t.c,1<<(t.n-1),pow(10,t.x),pow(10,t.y) from t where t.n<=6 union all select lv+1,b.n,nlist||','||c,blist+(1<<(b.n-1)),px+pow(10,b.x),py+pow(10,b.y) from s,t b where lv<10 and s.n<b.n and (instr(px+pow(10,b.x),3)=0 and instr(py+pow(10,b.y),3)=0) --and(select max(sum(case when a.x=b.x then 1 end), sum(case when a.y=b.y then 1 end))from t a -- where ((blist+(1<<(b.n-1))&(1<<(a.n-1)))>0))<=2 and b.n between lv/2*6+1 and lv/2*6+6*2 ) select * from s where lv=10 and (lv<3 or not exists(select 1 from b9 where (blist & b9.b) =0)) ; ```
Yes, it's difficult to understand that the default isn't 64bit nowadays. I'd think that it's rather problematic to find 32bit hardware to buy. All major Linux distributions are available in 64bit only.
You're correct in that nearly all hardware now is 64bit, but the problem here isn't the hardware, it's operating systems, and more specifically, software. While most of the install-base for OSes are also 64bit these days, quite many are still 32bit, and even the 64bit OSes have to be able to run software in the wild, of which very many are still fully 32bit, and by that token, if they use libraries, it has to also be 32bit libraries. Why are there still 32bit software around?, I hear you ask. Well there are different reasons for different 32bit software ranging anywhere from "couldn't be bothered" to "An enormous codebase that will take years to refactor" or just "using old outdated software that is no longer supported but it still does the job, so why not?". On Linux we are used to compiling stuff ourselves, but for most of the World, software comes pre-compiled, certainly 90+% of Windows or Apple user installed software and even these days on Linux it's more common for basic users to install from pre-compiled binaries. If you doubt me, just see the ruckus caused when Ubuntu tried to drop 32-bit support. I am betting that any major OS that wants to remain a major OS will keep supporting 32bit software for many years to come, meaning people will keep using 32bit software and need 32bit libraries (such as sqlite3). That's why it's still available.
macOS has gone 64-bit only. I didn't find the transition particularly onerous: I had to get a more recent version of Office, and a new usenet client, but everything else was already 64-bit.
The discussion here was about Linux, not about other platforms. Therefore, 64bit is key. At least on the desktop and servers.
What is so hard about running "`./configure && make`"?
It is strange, if you take a look at fossil <https://fossil-scm.org/home/uv/download.html> there is only a 64bit linux binary for download. A 32bit linux binary is noticeably absent. Windows has both 32 and 64 bit for download.
At this rate just download the x64 linux binary and use that as your sqlite shell. `$ fossil sql --no-repository SQLite version 3.37.0 2021-07-21 15:42:05 Enter ".help" for usage hints. sqlite> `
👍 wow really nice hack, thank you!
Fossil is primarily a binary blob. SQLite3 is source code. In one case the product is intended to be used without user modification. In the other, the product is quite useless without user modification (ie, application program). Do people make the same complaint for other **library** code? I am upset that there is no pre-compiled TOTP liberary available for linkage to my 128-bit machine built from bit slice (Intel 4004) processors.
> the product is quite useless without user modification (ie, application program). Lots of people beg to differ with this, and consider the CLI as much SQLite as the core library itself, and quite useful in and of itself. Why provide *any* binaries at all, given that kind of thinking? It's not as if 64-bit Linux binaries are esoteric, like your *imagined 128-bit machine*.
The question is that sqlite download page gives you an ability to get 32-bit binaries (and not 64-bit, which is a mainstream now) for Linux xD . And yep, sqlite shell is useful!
Ok, finally I wrote a script: ```bash #!/usr/bin/env bash set -euxo pipefail cat <<__EOF | docker build -t sqlite:latest - FROM ubuntu:20.04 as builder WORKDIR /root RUN apt-get update && apt-get install -y build-essential file libreadline-dev zlib1g-dev curl RUN curl -sL https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz | tar xzv RUN cd sqlite-autoconf-3360000 && ./configure --enable-readline && make -j __EOF docker cp $(docker create sqlite:latest):/root/sqlite-autoconf-3360000/sqlite3 ~/bin/sqlite3 ``` It works, and I'm happy.