> SQLite is not open source in the legal sense, as “open source” has a specific definition and requires licenses approved by the Open Source Initiative (OSI).
This is wrong, and harmfully wrong. OSI are not the arbiters of open source. Their Open Source Definition, though generally useful and accepted, is not without legitimate criticism and controversy. As for their approval, that’s a dreadful thing to rely on for any purpose; <https://writing.kemitchell.com/2019/05/05/Rely-on-OSI.html> is a good description of most of what’s wrong with it (it doesn’t really get into the broken politics enough; but some of his other articles contain more), and I like its summary: “The list of OSI-approved licenses reflects OSI’s practical and political history, not any useful, consistently functional category of license terms.”
As for whether SQLite is open source, well, the only reason a public domain dedication doesn’t meet the OSD is that it’s not a license. It’s more open. In a way that is legally mildly uncertain in some jurisdictions, sure, but to call it “not open source in the legal sense” is just wrong.
OP is wrong, SQLite does match the requirements outlined in the OSI's definition: https://opensource.org/osd
It's not "open source licensed" simply because it is not licensed. There is no license document for OSI to approve.
Relying on OSI approval does not necessarily make sense, they don't get to all licenses as your link points out. However arguing over their definition seems very foolish. People only do it when they want to pass their all-rights-reserved code as "open source" (e.g. "I can call it what I want"). Having adjectives that mean the same to everyone is very valuable, actually.
> Having adjectives that mean the same to everyone is very valuable, actually.
Yes, and that's precisely why OSI should have invented a brand new term which they could trademark. But instead they co-opted "open source" which already had a clear, generic meaning of "the source code is available", previously without any connotations around specific license terms. And then due to that prior usage of the term, OSI can't trademark it.
OSI created this terminology mess, and personally I don't think it is "foolish" to argue with their historical revisionism campaign around it.
> OP is wrong, SQLite does match the requirements outlined in the OSI's definition:
That is true for most of us, but there are jurisdictions that do not recognise the public domain in the same way. SQLite's license page mentions this and offers licensing for people who need to deal with this. https://www.sqlite.org/copyright.html
I will try to rephrase it and include links to Wikipedia and OSI
> As for whether SQLite is open source, well, the only reason a public domain dedication doesn’t meet the OSD is that it’s not a license. It’s more open.
That's true and I do acknowledge this in the post:
> Instead, SQLite is in the public domain, which means it has even fewer restrictions than any open source license.
I'm willing to let OSI own "Open Source", cause why not (do they have a trademark on "Open Source"?), but not "open source". All-lowercase "open source" includes public domain, I don't care what OSI says about it, while "Open Source" is whatever OSI says it is, and if that does not include public domain then so be it.
Capital letters are only useful as ECC, not direct signal. (You can't pronounce them, they aren't preserved in many contexts, the lay writer won't respect them, etc).
Your idea is like saying "Google" can be a trademark owned by Alphabet but "google" is just a verb. It seems like a cute linguistic hack but won't be meaningful in the public discourse.
Quite an interesting rabbit hole to explore. Apparently OSI holds a US trademark for “Open Source Initiative Approved License”, but no trademark for “open source” by itself.
Also, I believe that public domain as a concept does not exist in some countries. if i remember correctly the concern is that without a license the original author could change their mind and sue.
But any public domain software also matches the fsf and osi definition of free software and open source respectively. Atleast in jurisdictions where public domain exists.
You may be confusing things with copy-left, which is designed to protect users from developers. The gpl is a copy-left license.
There is an argument that without the copyleft provisions of the GPL (sometimes described as a virus), free software would not be as popular and important as it is today.
You are 100% correct. Open source has a common definition the vast majority of the world uses, a company can proclaim their own definition, but it doesn't magically change the language. Nobody is thinking about, or even aware of, the OSI, when using the term. The correct term people should be using is "OSI approved", or something similar, although that's no more meaningful or useful as a "bob approved" license, where bob is some random nobody.
The thing is, in many corporate and government settings, OSI is trusted by default as "this is open source", and anything not explicitly covered by OSI will cause you a world of pain with your legal department to get an exception.
You commented before reading...Unless the author updated the blog in the meanwhile.
Because point 6 says: "Instead, SQLite is in the public domain, which means it has even fewer restrictions than any open source license."
This blog feels like karma farming. Recycled, old points in listicle format on a popular topic with questionable accuracy.
This is on top of mixing in grievances the author's startup holds against Dr Richard Hipp, like "won't accept (our) outside contributions" and "not actually open source according to OSI".
As far as content goes, this listicle is probably great for view counts/engagement/flamewars. I'd personally prefer deeper thinking which this blog's previous posts-- high in hype and low in technical rigor-- have not yet provided.
> Recycled, old points in listicle format on a popular topic with questionable accuracy.
Could you please state which are inaccurate? I am happy to correct them.
As for the rest of the comment, well, I don't know what to say. I am a beginner in databases and I am journaling the things I'm learning. Some of my posts might not have depth because I don't know much myself.
>There are over one trillion (1000000000000 or a million million) SQLite databases in active use.
The original source[0] (which you don't link to):
>Since SQLite is used extensively in every smartphone, and there are more than 4.0 billion (4.0e9) smartphones in active use, each holding hundreds of SQLite database files, it is seems likely that there are over one trillion (1e12) SQLite databases in active use.
I am fairly certain that Dr. Hipp has discussed changes in SQLite that were desired by Microsoft for integration into Windows, which came to pass via a foundation membership.
I believe that this was mentioned in the video below (I am not able to verify for now):
I don't know if this is an inaccuracy per se, but it seems like (7) and (8) are in contradiction. One says they don't accept outside contributions and the other says, "Contributing to SQLite is invite-only".
> I'd personally prefer deeper thinking which this blog's previous posts-- high in hype and low in technical rigor-- have not yet provided.
Really? Something like this[1] (literally the previous post made by the author!) is "high in hype and low in technical rigor"? Or do you just have an axe to grind?
This comment feels like "old man yells at clouds". Vague, non-specific points about the accuracy of the article. This is on top of mixing in grievances with the author non-judgmentally listing and citing facts about SQLite's contribution model and license.
As far as the content goes, this comment is probably great for view counts/engagement/flamewars. I'd personally prefer deeper thinking, which this author's previous comments-- usually fun and interesting-- have provided ;)
> SQLite does not have a Code of Conduct (CoC), rather Code of Ethics
There was confusion over this, because of different usage of words. Simplifying well beyond the point of strict accuracy, a CoC is a weapon to bind and control external contributors’ behaviour, the CoE is SQLite developers declaring their intended conduct towards others.
> SQLite is pronounced as “Ess-Cue-El-Lite”.
This doesn’t match the quote that follows, which says “S-Q-L-ite, like a mineral”. And that’s just how one guy chooses to pronounce it… I wonder how many others do; certainly I’ve never heard it.
Some time around 2008-2012, I think, my habit shifted from saying S Q L to SEQUEL in most cases. Even internal voice, when thinking/reading, still says SEQUAL now. Even things like My S Q L became My SEQUEL.
I feel like I made that shift due to how people around me, and how public speakers, were aligning on it too, it felt to me that the nomenclature was unifying a bit as linguistics evolve and change a bit over normal course of time. I remember the shift was not easy and I had to put intention into it and it took a bit of time to make it feel natural. Although, I’ve never thought about this too deeply and as I write it I’m Not sure how others would respond to my memory of it. I’m sure it’s very regional, and now age dependent as I’m sure if I was passed mid career at that time i wouldn’t have budged on my preferred terminology but also there’s many people who maybe are just too young to understand the time and trend that I remember. Or just my own experience and there was nothing really unifying at all.
I remember hearing an interview with Richard Hipp where he said he pronounced it as you do ("rhymes with kryptonite" I think he may have said, or perhaps "like a mineral").
I'd always pronounced it in my head S-Q-L-Lite up until that point, but I much prefer this other way that I'd never considered. It rolls off the tongue easier and adds a bit of fancy.
I have never heard anything else but S-Q-L, in multiple workplaces. What I was new to databases I started with the history lesson, but was quickly corrected to pronounce it S-Q-L.
I don't even know anymore, nor does anyone else I think
The OP failed to mention that SQLite does have opt-in strict tables that enforce types, you just need to do `CREATE TABLE name (stuff TEXT) STRICT`, see https://www.sqlite.org/stricttables.html
Like journal mode being ROLLBACK by default instead of WAL, foreign key constraints being off by default, tables being lax by default is part of SQLite’s dedication to backwards compatibility.
I worked with Richard Hipp on a project to integrate his query engine into a custom scripting language with persistent storage for embedded devices (think c#'s linq but backed by flash storage).
He was a pleasure to work with and it seemed he made a decent living just off of support contracts for projects like this. One of the few one-man-shops that really, really worked out.
I was still just a "kid" at the time (early 20s, I'm over 40 now for context) so I was just excited to be working with folks that seemed to know what they were doing (as I clearly didn't.) Every day I was excited to go to work and absorb as much as I could. Richard and the other seniors were never condescending and everyone was able to communicate the inner workings of their systems to a naive kid straight out of college.
The same project (nTAG Interactive LLC) also involved Brian Silverman who famously made a Babbage style mechanical computer capable of playing tick tac toe using only tinker toys for construction while he was still attending university. He also created the original Lego "computing brick" which ran Logo, a lisp-adjacent language, via interpreter/pcode vm he wrote using HC11 ASM (and later he ported to PIC for the "Cricket" robotics controller.) That brick project spun off into what is today Lego Mindstorms. So I've had the privilege of working with some very creative and intelligent folks over the years.
I had only stumbled into the opportunity by way of working as an assistant at my local university's robotics lab (to help pay for undergrad) when my professor thought I would be a good fit for the MIT Media Lab startup opening.
The job was a tremendously fun time and to this day I still think of it as my "favorite" work experience. Sadly, as with most startups, ours didn't make it when funding dried up, so the fun eventually ended. To be honest, I've been involved with a number of other early stage startups (and various larger size orgs) since and none have come close to the experience. There truly isn't anything better than being surrounded by folks who are masters at their craft and are willing to help you learn.
I am interested in a thing where the whole programming language / program stack and everything is stored in the memory so you can have a language where it can run from where it was paused , inspired by some comment on some other hackernews thread . I had spent some of my weekends trying it but no use
What you're describing is exactly how early versions of PalmOS worked as they just kept parts of the OS in static ram so you always continue applications exactly how you left them.
Did they stop thinking of performance gains as a priority after 2017? The improvements have been very weak since then. Just wondering if they ran out of low hanging fruit or if they just didn't think it was important anymore.
My latest favorite fun fact about SQLite is that it is not only my favorite SQL database, but also my favorite NoSql database.
Since 2024, all my new database tables have only one column. Everything just goes into one single JSON column, which I always call "data".
SELECT
cities.data->>'name' city_name,
countries.data->>'name' country_name
FROM cities
JOIN countries
ON countries.data->'id' = cities.data->'country_id'
I looked around a bit if some NoSql database would make this easier. But it turned out no, even now that I only use Json everywhere, SQLite is still the best tool.
I’m curious what the reasoning behind having no id or key column. Do you use indexed expressions to index JSON fields? Do you use Rowid for certain queries? Or do you not bother with indexes?
My understanding is that NoSQL databases still have indexes and it seems like using SQLite as you demonstrate could be worse in that regard.
The entries in the data column already have an id field. What would be an upside of having another id in a column? It seems that only complicates things and has the potential for invalid states (different id in the id column than in the json field).
So far I have not used indexes because things are fast enough as they are. I would expect that when I need more speed, I can easily add indexes on expressions.
Why do you expect SQLite indexes on expressions to be worse than what NoSQL databases do for indexing?
> So DRH asked the question: what if the database just worked without any server? This was an innovative idea back then.
Strange my recollection of the time was file based databases were much more popular. FoxPro, Access (jet) and Dbase where all in wide use in 90's and early 2000's and ran a lot of business software using network file shares instead of a database server.
There were also minimalist SQL interfaces to say BerkeleyDB and DBM around.
It was a rival of MySQL for a while. The article says "mSQL was the first low-cost SQL-based database management system" but notes citation needed. Certainly matches my memory though.
Yeah this one stuck out to me. I had thought that SQLite was probably inspired by BerkeleyDB which came out in 1994. That’s key value not relational, but the idea of a local, embedded database was not new.
This is wrong, and harmfully wrong. OSI are not the arbiters of open source. Their Open Source Definition, though generally useful and accepted, is not without legitimate criticism and controversy. As for their approval, that’s a dreadful thing to rely on for any purpose; <https://writing.kemitchell.com/2019/05/05/Rely-on-OSI.html> is a good description of most of what’s wrong with it (it doesn’t really get into the broken politics enough; but some of his other articles contain more), and I like its summary: “The list of OSI-approved licenses reflects OSI’s practical and political history, not any useful, consistently functional category of license terms.”
As for whether SQLite is open source, well, the only reason a public domain dedication doesn’t meet the OSD is that it’s not a license. It’s more open. In a way that is legally mildly uncertain in some jurisdictions, sure, but to call it “not open source in the legal sense” is just wrong.
It's not "open source licensed" simply because it is not licensed. There is no license document for OSI to approve.
Relying on OSI approval does not necessarily make sense, they don't get to all licenses as your link points out. However arguing over their definition seems very foolish. People only do it when they want to pass their all-rights-reserved code as "open source" (e.g. "I can call it what I want"). Having adjectives that mean the same to everyone is very valuable, actually.
Yes, and that's precisely why OSI should have invented a brand new term which they could trademark. But instead they co-opted "open source" which already had a clear, generic meaning of "the source code is available", previously without any connotations around specific license terms. And then due to that prior usage of the term, OSI can't trademark it.
OSI created this terminology mess, and personally I don't think it is "foolish" to argue with their historical revisionism campaign around it.
Edit to add: for numerous proven examples of the term being used for many years prior to the OSI's existence, read the link ezekg already posted below, https://dieter.plaetinck.be/posts/open-source-undefined-part...
That is true for most of us, but there are jurisdictions that do not recognise the public domain in the same way. SQLite's license page mentions this and offers licensing for people who need to deal with this. https://www.sqlite.org/copyright.html
OSI also says Public Domain is not open source: Public Domain Is Not Open Source https://opensource.org/blog/public-domain-is-not-open-source
Deleted Comment
> As for whether SQLite is open source, well, the only reason a public domain dedication doesn’t meet the OSD is that it’s not a license. It’s more open.
That's true and I do acknowledge this in the post:
> Instead, SQLite is in the public domain, which means it has even fewer restrictions than any open source license.
[1] https://en.wikipedia.org/wiki/Open_source
[2] https://opensource.org/blog/public-domain-is-not-open-source
Your idea is like saying "Google" can be a trademark owned by Alphabet but "google" is just a verb. It seems like a cute linguistic hack but won't be meaningful in the public discourse.
The free as in freedom, but not as in free beer quadrant doesn't work too well, especially for individual developers.
Also, I believe that public domain as a concept does not exist in some countries. if i remember correctly the concern is that without a license the original author could change their mind and sue.
But any public domain software also matches the fsf and osi definition of free software and open source respectively. Atleast in jurisdictions where public domain exists.
You may be confusing things with copy-left, which is designed to protect users from developers. The gpl is a copy-left license.
Dead Comment
As far as content goes, this listicle is probably great for view counts/engagement/flamewars. I'd personally prefer deeper thinking which this blog's previous posts-- high in hype and low in technical rigor-- have not yet provided.
Could you please state which are inaccurate? I am happy to correct them.
As for the rest of the comment, well, I don't know what to say. I am a beginner in databases and I am journaling the things I'm learning. Some of my posts might not have depth because I don't know much myself.
>There are over one trillion (1000000000000 or a million million) SQLite databases in active use.
The original source[0] (which you don't link to):
>Since SQLite is used extensively in every smartphone, and there are more than 4.0 billion (4.0e9) smartphones in active use, each holding hundreds of SQLite database files, it is seems likely that there are over one trillion (1e12) SQLite databases in active use.
You're changing speculation to a fact.
[0] https://www.sqlite.org/mostdeployed.html
SQLite _does_ support strict column types since 3.37: https://www.sqlite.org/stricttables.html
I believe that this was mentioned in the video below (I am not able to verify for now):
https://m.youtube.com/watch?v=Jib2AmRb_rk
It would be interesting to see what is required for an organization to negotiate non-trivial changes in SQLite.
https://en.wikipedia.org/wiki/Battleshiphttps://en.wikipedia.org/wiki/Destroyer
Really? Something like this[1] (literally the previous post made by the author!) is "high in hype and low in technical rigor"? Or do you just have an axe to grind?
[1]: https://avi.im/blag/2024/sqlite-past-present-future/
As far as the content goes, this comment is probably great for view counts/engagement/flamewars. I'd personally prefer deeper thinking, which this author's previous comments-- usually fun and interesting-- have provided ;)
There was confusion over this, because of different usage of words. Simplifying well beyond the point of strict accuracy, a CoC is a weapon to bind and control external contributors’ behaviour, the CoE is SQLite developers declaring their intended conduct towards others.
> SQLite is pronounced as “Ess-Cue-El-Lite”.
This doesn’t match the quote that follows, which says “S-Q-L-ite, like a mineral”. And that’s just how one guy chooses to pronounce it… I wonder how many others do; certainly I’ve never heard it.
I believe the latter is the correct name for historical reasons. IBM originally named SQL 'SEQUEL' but were forced to rename it for trademark reasons.
So I pronounce SQLite sequelite.
This is by far the most popular pronunciation I’ve encountered, and I think by far the most practical one too.
I feel like I made that shift due to how people around me, and how public speakers, were aligning on it too, it felt to me that the nomenclature was unifying a bit as linguistics evolve and change a bit over normal course of time. I remember the shift was not easy and I had to put intention into it and it took a bit of time to make it feel natural. Although, I’ve never thought about this too deeply and as I write it I’m Not sure how others would respond to my memory of it. I’m sure it’s very regional, and now age dependent as I’m sure if I was passed mid career at that time i wouldn’t have budged on my preferred terminology but also there’s many people who maybe are just too young to understand the time and trend that I remember. Or just my own experience and there was nothing really unifying at all.
(US/western, not coastal)
I pronounce it ess que lite.
and always letter out SQL.
postgresql is the tricky one, naively there is no good way to pronounce it. so when formal I say "postgres Q L" but mostly just call it postgres
and because of the previous cases I have started slurring mysql, easily the most pronounceable one into "mys Q L"
Microsofts SQL server (which I have never actually used, and almost never talk about) is simply "S Q L server"
I'd always pronounced it in my head S-Q-L-Lite up until that point, but I much prefer this other way that I'd never considered. It rolls off the tongue easier and adds a bit of fancy.
I don't even know anymore, nor does anyone else I think
Like journal mode being ROLLBACK by default instead of WAL, foreign key constraints being off by default, tables being lax by default is part of SQLite’s dedication to backwards compatibility.
I did not, but probably I did not phrase correctly:
> Strong typed columns are opt-in.
> 18. I hate that it doesn’t have types. It’s totally YOLO:
In the point where you say that you didn’t mention STRICT mode, which seems to directly address your complaint.
He was a pleasure to work with and it seemed he made a decent living just off of support contracts for projects like this. One of the few one-man-shops that really, really worked out.
The same project (nTAG Interactive LLC) also involved Brian Silverman who famously made a Babbage style mechanical computer capable of playing tick tac toe using only tinker toys for construction while he was still attending university. He also created the original Lego "computing brick" which ran Logo, a lisp-adjacent language, via interpreter/pcode vm he wrote using HC11 ASM (and later he ported to PIC for the "Cricket" robotics controller.) That brick project spun off into what is today Lego Mindstorms. So I've had the privilege of working with some very creative and intelligent folks over the years.
I had only stumbled into the opportunity by way of working as an assistant at my local university's robotics lab (to help pay for undergrad) when my professor thought I would be a good fit for the MIT Media Lab startup opening.
The job was a tremendously fun time and to this day I still think of it as my "favorite" work experience. Sadly, as with most startups, ours didn't make it when funding dried up, so the fun eventually ended. To be honest, I've been involved with a number of other early stage startups (and various larger size orgs) since and none have come close to the experience. There truly isn't anything better than being surrounded by folks who are masters at their craft and are willing to help you learn.
I am interested in a thing where the whole programming language / program stack and everything is stored in the memory so you can have a language where it can run from where it was paused , inspired by some comment on some other hackernews thread . I had spent some of my weekends trying it but no use
https://www.sqlite.org/images/sschart20221116.jpg
The bulk of the gains happened between 2013-2017.
Since 2024, all my new database tables have only one column. Everything just goes into one single JSON column, which I always call "data".
I looked around a bit if some NoSql database would make this easier. But it turned out no, even now that I only use Json everywhere, SQLite is still the best tool.My understanding is that NoSQL databases still have indexes and it seems like using SQLite as you demonstrate could be worse in that regard.
So far I have not used indexes because things are fast enough as they are. I would expect that when I need more speed, I can easily add indexes on expressions.
Why do you expect SQLite indexes on expressions to be worse than what NoSQL databases do for indexing?
So you have only just started doing this
I can add a new attribute the very moment I create a new row.
When I want to add "not_available_before: 2026" to a car, I can do that right away. No need to alter the table and add a new column.
Strange my recollection of the time was file based databases were much more popular. FoxPro, Access (jet) and Dbase where all in wide use in 90's and early 2000's and ran a lot of business software using network file shares instead of a database server.
That said, I'm not aware of anyone doing that with SQL before SQLite. Though I might well have missed some.
It wasn't just used by MS Access, its was used from VB and other languages because it was just an ODBC/OLEDB driver.
https://en.wikipedia.org/wiki/Access_Database_Engine
FoxPro looks like it supported SQL in V2 in 1991
https://www.landley.net/history/mirror/collate/foxpro/foxpro...
There were also minimalist SQL interfaces to say BerkeleyDB and DBM around.
It was a rival of MySQL for a while. The article says "mSQL was the first low-cost SQL-based database management system" but notes citation needed. Certainly matches my memory though.
Home page: https://hughestech.com.au/products/msql/
[I thought it could run serverless but maybe that was very early versions if at all]
I also vaguely remember an optional SQL interface for Btrieve circa 1990, but I might be mistaken.
We had it in an application written in C.
https://en.wikipedia.org/wiki/DBase#dBase_IV