https://turso.tech/blog/turso-0.8.0
In any case, this is on our radar and we do intend to improve it but not the highest priority right now.
247 karma · joined January 2, 2010
https://turso.tech/blog/turso-0.8.0
In any case, this is on our radar and we do intend to improve it but not the highest priority right now.
I am sure you understand that I have absolutely nothing to do with Scylla's licensing. I have not worked there for four years nor was I ever in a position there that I would even had that opportunity to influence such decisions.
I am also sure you understand that Scylla's development model was completely different: they had AGPL license and contributors had to sign a CLA, which is why they were able to relicense in the first place. Turso is MIT licensed and there's no barrier to contributing and, therefore, already a much bigger contributor base.
I fully understand the scepticism, but you're mistaken about the open source history of Turso's founders.
As others point out in this thread, there's already rqlite for Go, sqlite for C, and now we've open sourced our work on bringing SQLite and Raft to Rust: https://glaubercosta-11125.medium.com/winds-of-change-in-web...
That said, I am not claiming thread-per-core is _the solution_ either, just saying that if you can partition data at application-level, you can make things run plenty fast. Of course, you’re also exposing yourself to other issues, like “hot shards” where some CPUs get disproportionately more work than others. However, as we scale to more and more cores, it seems inevitable that we must partition our systems at some level.
With the GPL, you are required to make your modifications available as GPL if you distribute the modified program. This creates a loophole for ASPs, which can modify GPL’d code, but because they offer it as a service (and don’t distribute the program), they don’t have to share the modifications. AGPL closes this loophole by explicitly saying that network access is considered as “distribution”.
So no, you don't need to make your web application AGPL. Just like you don't make all your applications running on Linux GPL just because they happen to communicate with the kernel over system calls. Copyleft licenses are relevant only if your code is a derivative work of the original.
You don't have to take my word for it, just check out their own site:
https://opensource.org/licenses/AGPL-3.0
The licenses you are talking about, such as MIT or Apache, are called _permissive licenses_ whereas AGPL is a _copyleft license_. However, both types of licenses can be open source licenses, if they fill the OSI requirements.
Please note that @glommer is talking about the classic secondary index implementation in Cassandra, which is very simple but also broken. I don't know the details but we probably did have "half-ready" code for that. We decided against going forward with it because Cassandra had already moved to SASI (which is also much more complex). As I said, we're currently focusing on materialized views, and tacking secondary indices after that.
Btw, I highly recommend subscribing to our user mailing list or engaging on Github for questions and comments about features. You'll get better and up-to-date answers there.
Update: reading @glommer's reply carefully, he explicitly says that he's unsure if we'll move forward with that specific implementation: "_if_ we do implement it, it should land in our main version in a couple of weeks" (emphasis mine).
We are currently working on first finishing materialized view support, which will hopefully be completed in the upcoming months. Secondary indices will be implemented after that and we're hoping to reuse MV infrastructure for that. So I personally expect both features to land into a release later this year.
There's an open issue about it on Github:
https://github.com/scylladb/scylla/issues/2058
Please feel free to upvote and comment on the issue to voice your interest in the feature.
Of course, to do that, you need to find the manual for your machine architecture. The x86 manuals are, for example, available here:
http://www.intel.com/content/www/us/en/processors/architectu...
You also then start to notice things like the operating system specific application binary interfaces (ABI):
http://www.x86-64.org/documentation/abi.pdf
and object file formats such as ELF that's used in Linux:
http://www.skyfree.org/linux/references/ELF_Format.pdf
or Mach-O used in Mac OS X:
https://developer.apple.com/library/mac/documentation/develo...
You can also do the same thing with the JVM and look at its JIT-generated machine code with the '-XX:+PrintCompilation' option:
http://stackoverflow.com/questions/13086690/understanding-th...
The JavaScript CLI is being phased out.
The "switching dynamically between emulation and virtualization" is simply what I referred to as "hardware emulation" using dynamic binary translation. Of course, when the host and guest CPUs are the same, you end up running bulk of the original native code pretty much as-is. But because you're dynamically generating the code, you end up causing a trap to the hypervisor for the corner cases.
The VirtualBox article is not clear on what it does when hardware supports virtualization (Intel VT-x ("Vanderpool") and AMD-V (SVM) support) but I am guessing it also does what QEMU does, which is to use KVM (or whatever the equivalent is on other platforms than Linux).
What these extensions do is eliminate dynamic binary translation completely. You only trap to the hypervisor on PIO and MMIO accesses and few other minor cases. But all this is controlled by hardware and KVM kernel subsystem and the hypervisor itself doesn't touch the guest instruction stream.
[ Disclaimer: I'm not that familiar with KVM internals so the above explanation is probably a slight over-generalization. ]