-
Notifications
You must be signed in to change notification settings - Fork 955
Description
It would be nice to finally de-crapify and de-egoify the project fully. Just make a new primary version and go backwards incompatible.
I'm fairly certain the blanket "license change" is also illegal since they didn't get permission from every copyright holder to rip their code apart from the license (also why linux can never change from GPL2), but if they don't care, then we don't have to care about un-licensing all their code either. Evil goes both ways I guess (that article has some timeline inaccuracies and rationale inaccuracies and leaves out multiple other key players, but it's mostly correct in how redis was "stolen" by motivated exploiters over the years).
Wishlist
- finally remove all master/slave terminology (See Don't use master/slave terminology (non-breaking changes only) #36)
- remove sentinel and cluster (they will never work reliably because they are fundamentally flawed in their design. notice how nothing else in the world uses them or their design patterns? at least clickhouse liked zookeeper so they rewrote it in C++ for their own usage)
- overall it's more stable going with separation-of-concerns and using consistent-hash-replication sharding proxies in front of these things anyway, though maybe some CRDTs will need to get involved
- port all tcl scripts to something better (it's 2024 not 1994)
- new code robots can greatly help with this I imagine
- use
clang-formatfor all the code (it's 2024 not 1994)clang-format -style="{BasedOnStyle: llvm, IndentWidth: 4, AllowShortFunctionsOnASingleLine: None, KeepEmptyLinesAtTheStartOfBlocks: false, InsertBraces: true; InsertNewlineAtEOF: true}"
- stop supporting weird platforms because it's 2024 and nobody cares about big endian or 32 bit systems anymore (it causes unnecessary maintenance overhead for refactoring and building new features)
- stop using CRC everywhere. again, it's 2024 not 1994. Nobody should be using CRC anymore because it's designed for 1970s serial interfaces. We have much better systems now.
- like, this thing is complete amateur garbage what are people even doing anymore: https://github.com/placeholderkv/placeholderkv/blob/unstable/src/crc16_slottable.h
- attempting to use designed-to-be-slow CRC running at 300 MB/s (or 1.5 GB/s with my improvements I spent a year coming up with 10 years ago) to blockingly validate multi-gigabyte files is just computational malpractice when things like
xxh3orxxh128exists running at 30 GB/s.
- fix the hand written, hand parsed, self-rewriting config file system abomination (nothing else in the world does this, and it caused a wormable exploit in the past so should never be trusted. it only exists because "lol its a cool trick!!!" unprofessional insecure programming)
- stop using hand written Makefiles and use CMake instead (again, it's 2024 not 1994)
- I actually spent a few hundred hours making jemalloc compatible with CMake in 2017-2019 then when I aksed FB if they could pay for my contributions they said "uh, we can send you a t-shirt?" then they never even sent the t-shirt (a month later, FB paid a $5 billion government fine for their typical FB-style business practices, but they sure don't have any money to pay developers... go figure?)
- convert the info/status output to regular readable JSON instead of hand-written output formats requiring hand-written parsers to read
- continue to refactor and improve a lot of the data structures from their unrefined CS101 origins
there's probably a couple other dozen things too, but that's my long-term gripe list I'm really surprised most people haven't been motivated to see the problems and fix them yet for long term project reliability and continuity.
Conclusion
I fixed all these problems (and more!) in my own rewrite a couple years ago (just imagine you put luajit, sqlite, erlang, redis, and memcached in a blender then a new modern high-performance multi-core secure in-memory cache system popped out), but I tried to sell it instead of giving away thousands of hours of work across 5+ years for free, so it never got any traction: https://carrierdb.cloud/
Provenance
i used to do stuff here but the project preferred to remain computationally and culturally conservative instead of embracing the future (except for selling out for profit at the expense of community and collaboration and user experience, of course) :(
Work I created which the project sometimes fought against but eventually included anyway:
- entire module system was my own design and implementation, but the project fought against it until later they decided it could be used for profit
- geo commands (though they aren't complete and should really use h3 instead of geohash, but nobody seems to understand enough to maintain it over the past 10 years)
- JSON experiments (not sure what happened with those, but my redis replacement server can switch between output formats of redis, memcached, JSON, and even python (only format with actual set syntax in the output), and it also supports unlimited nesting of any data type each with their own nested expiration values too)
- massive memory improvements to the lists structures (further efficiency improvements are in my redis replacement server too along with improving all the other data structures as well) — this was inspired by the custom changes to redis Twitter was running internally over thousands of servers totaling terabytes of RAM (which was a lot in 2015), but the twitter devs refused to release their improvements because "we can't get legal to clear it," so I re-built their ideas in an even better version from scratch (since then, millions of servers have benefited from these efficiency improvements for free, so thanks to me i guess)
- crc speed improvements which took a couple hundred hours of on-and-off experiments over a year to finally get the logic working because redis uses a random weird non-standard CRC64 implementation for some reason so no other libraries are compatible with it unless you do extensive custom workarounds all over the place.
placeholderkv$ rg "Matt Stancliff" on unstable
src/quicklist.c
3: * Copyright (c) 2014, Matt Stancliff <matt@genges.com>
src/geo.c
2: * Copyright (c) 2014, Matt Stancliff <matt@genges.com>.
src/geohash_helper.c
3: * Copyright (c) 2014, Matt Stancliff <matt@genges.com>.
src/crcspeed.h
1:/* Copyright (c) 2014, Matt Stancliff <matt@genges.com>
src/quicklist.h
3: * Copyright (c) 2014, Matt Stancliff <matt@genges.com>
src/geohash_helper.h
3: * Copyright (c) 2014, Matt Stancliff <matt@genges.com>.
src/geohash.h
3: * Copyright (c) 2014, Matt Stancliff <matt@genges.com>.
src/zmalloc.c
865: * 3) Was modified for Redis by Matt Stancliff.
src/crcspeed.c
4: * Modifications by Matt Stancliff <matt@genges.com>:
src/geohash.c
3: * Copyright (c) 2014, Matt Stancliff <matt@genges.com>.
src/crc64.c
1:/* Copyright (c) 2014, Matt Stancliff <matt@genges.com>
deps/hiredis/hiredis.c
4: * Copyright (c) 2015, Matt Stancliff <matt at genges dot com>,
deps/hiredis/net.c
5: * Copyright (c) 2015, Matt Stancliff <matt at genges dot com>,
deps/hiredis/net.h
5: * Copyright (c) 2015, Matt Stancliff <matt at genges dot com>,
deps/hiredis/fuzzing/format_command_fuzzer.c
4: * Copyright (c) 2020, Matt Stancliff <matt at genges dot com>,
deps/hiredis/hiredis.h
4: * Copyright (c) 2015, Matt Stancliff <matt at genges dot com>,
deps/hiredis/CHANGELOG.md
511:* Fix tests when assert() undefined (Keith Bennett, Matt Stancliff)