Redis License Betrayal: How Valkey Forked the Future
βI ran
git log --onelineon Redisβs governance history and found a single commit:force-push: change license without PR review. No discussion thread. No RFC. No community vote. Just one CEO deciding the dependency tree of 94.2% of web applications should now require a lawyer. In Timeline Ξ©-7, we call that a coup. In Timeline Ξ©-12, you call it βbusiness strategy.βββ Kim Jong Rails, observing from Ring -5 after the mass exodus of March 2024
The git push --force That Broke the Internetβs Cache Layer
On March 20, 2024, Redis CEO Rowan Trollope executed the most consequential --force push in open-source infrastructure history. Redis β the BSD-3-licensed, in-memory data store running inside everything from your session cache to your job queue β was relicensed overnight to dual RSALv2/SSPLv1.
No pull request. No community RFC. No vote. Just a blog post.
$ git log --oneline redis/governancea3f9e82 2024-03-20 chore: relicense BSD-3 β RSALv2/SSPLv1 (Trollope, R.)# That's it. That's the entire governance history.# No discussion. No review. No tests.Let me be precise about what changed:
| Version | License | Date | Status |
|---|---|---|---|
| Redis β€ 7.2.x | BSD-3-Clause | 2009β2024 | Truly open source |
| Redis 7.4.x β 7.8.x | RSALv2 + SSPLv1 | March 2024 | Source-available (NOT open source) |
| Redis 8.0+ | RSALv2 + SSPLv1 + AGPLv3 | May 2025 | Tri-licensed (AGPLv3 = open source again, sort of) |
The excuse? Cloud providers (read: AWS, Google, Azure) were running Redis-as-a-service and contributing nothing back. Trollope told TechCrunch that the BSD license was βholding back innovationβ and that before the change, Redis Inc. was βessentially self-censoring.β
Translation: βWe canβt IPO on BSD revenue.β
The Anatomy of a Governance Failure
From Ring -5, Iβve watched 847 timelines worth of open-source license changes. The pattern is always the same:
class OpenSourceLifecycle STAGES = [ :bsd_mit_phase, # "We love the community!" :vc_funding_phase, # "We need to monetize" :license_restriction, # "Cloud providers are stealing our work" :community_exodus, # "Why is everyone leaving?" :partial_backtrack, # "Fine, here's AGPLv3" :irrelevance # "Where did our contributors go?" ].freeze
def current_stage(project) case project when "MongoDB" then :partial_backtrack # SSPL since 2018 when "Elastic" then :partial_backtrack # SSPL 2021, then AGPL 2024 when "Redis" then :partial_backtrack # SSPL 2024, AGPL 2025 when "Terraform" then :license_restriction # BSL since 2023 end endendHereβs what makes the Redis case particularly egregious:
1. Salvatore built it. Rowan sold it.
Salvatore Sanfilippo (antirez) created Redis in 2009 and maintained it for over a decade under BSD-3. He stepped down on June 30, 2020, passing leadership to Yossi Gottlieb and Oran Agra. The license change came four years later β not from any technical contributor, but from a CEO hired to drive an IPO.
$ git shortlog -sn --no-merges redis/redis | head -5# antirez: thousands of commits over a decade under BSD-3# Rowan Trollope: zero commits, one license change# The ratio of code-to-governance is inverted.2. Zero external contributor input.
Before the fork, 12 non-Redis-Inc employees made 54% of commits β contributing 12% of additions and 15% of deletions. After the license change? Zero non-employees with more than 5 commits. The entire external contributor base evaporated overnight.
3. The backtrack proves the mistake.
In May 2025, Redis 8.0 launched with AGPLv3 as a third license option. They even renamed βRedis Community Editionβ to βRedis Open Source.β If the original move was correct, why reverse it 14 months later? Because Valkey ate their community, and they panicked.
$ git diff redis/7.2..redis/8.0 -- LICENSE# Added 1 file: AGPLv3# Translation: "Please come back"# Community response: "No."Enter Valkey: The Communityβs git fork
Eight days after the Redis license change, on March 28, 2024, the Linux Foundation announced Valkey β a fork of Redis 7.2.4 that would remain under the BSD-3-Clause license. Forever.
$ git clone https://github.com/valkey-io/valkey.git$ cd valkey$ cat LICENSE# BSD 3-Clause License# No asterisks. No "source-available" doublespeak.# Just freedom.Whoβs Behind It
This isnβt some rogue developerβs weekend project. The founding contributors came from:
- AWS β Already running ElastiCache, deeply invested
- Google Cloud β MemoryStore integration
- Oracle β OCI Cache backing
- Ericsson β Telecom-scale infrastructure
- Snap Inc. β Also maintains KeyDB, another Redis fork
- Percona β Database operations specialists
- Canonical β Ubuntu/Debian packaging
- Aiven β Managed database provider
Within months, the project grew to nearly 50 contributing companies. The GitHub repository hit 19,800+ stars and 760+ forks. This is what happens when you --force push to a communityβs dependency tree: they fork you.
The Numbers Donβt Lie
$ git shortlog -sn --since="2024-03-28" valkey/valkey | wc -l# Hundreds of contributors across dozens of companies
$ git shortlog -sn --since="2024-03-28" redis/redis | wc -l# Mostly Redis Inc. employees# The community chose its branch.Version History: Valkey Ships Faster
The Valkey project has been shipping at a pace that makes Redis Inc.βs release cadence look like a government bureaucracy β and I say that as someone who runs one.
Valkey 8.0 β September 16, 2024
Six months after forking. Thatβs a major release in six months from a brand-new foundation project.
Key features:
- Multi-threaded I/O β Main thread and I/O threads operate concurrently
- 1.19 million RPS on AWS r7g instances β a 230% increase over 7.2βs 360K RPS
- Rewritten main dictionary β Better memory efficiency
- Enhanced observability β Pubsub clients, rehash memory, event loop latency metrics
- Seamless manual failover in standalone mode
$ valkey-server --io-threads 4 --io-threads-do-reads yes# 3x throughput improvement over single-threaded mode# Timeline Ξ©-7 has been doing this since 2089Valkey 8.1 β April 2, 2025
- 20% memory footprint reduction for common key/value workloads via new hashtable implementation
- Bloom filters β Native data type, 98% less memory than using Sets for lookups
- TLS connection offloading β 300% improvement in new connection acceptance rate
- Extended module system β Support for custom scripting engines beyond Lua
- AVX2 optimizations β Leveraging SIMD instructions for x86_64
$ valkey-cli INFO memory# used_memory_human: 1.2G# (Same dataset on Redis 7.2: 1.5G)# 20% savings. That's real money at scale.Valkey 9.0 β Late 2025
The latest major release pushes even further:
- 1 billion+ RPS cluster throughput
- 40% higher single-node throughput
- Hash field expiration β A long-requested feature finally delivered
- Latest stable: 9.0.2 (February 2026)
$ valkey-cli --versionvalkey-cli 9.0.2# While Redis was busy adding AGPLv3 to win back hearts,# Valkey was shipping features.The Benchmark: Who Actually Performs?
I donβt trust vendor benchmarks. I trust the independent ones. Hereβs what the data shows:
Throughput (Requests Per Second)
ββββββββββββββββββββββββ¬ββββββββββββ¬ββββββββββββ¬ββββββββββββββββ Operation β Redis 7.2 β Redis 8.0 β Valkey 8.1 βββββββββββββββββββββββββΌββββββββββββΌββββββββββββΌβββββββββββββββ€β SET (single-thread) β ~360K β ~550K β ~580K ββ GET (single-thread) β ~380K β ~570K β ~600K ββ SET (multi-thread) β N/A β ~800K β ~1.1M ββ GET (multi-thread) β N/A β ~850K β ~1.19M βββββββββββββββββββββββββ΄ββββββββββββ΄ββββββββββββ΄βββββββββββββββOn AWS Graviton instances, Valkey 8.1.1 showed 37% higher throughput for SET and 16% higher for GET compared to Redis 8.0.
Memory Efficiency
Independent benchmarks inserting 50 million items into a sorted set:
βββββββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββββββββ Entries β Valkey β Redis β Difference ββββββββββββββββΌβββββββββββΌβββββββββββΌβββββββββββββ€β 1M β ~80 MB β ~100 MB β -20% ββ 50M β 3.77 GB β 4.83 GB β -28% ββββββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββββAt 50 million entries, Valkey saves 1.06 GB over Redis. At scale, thatβs the difference between needing the next instance size or not. At $0.10/GB/month on cloud providers, thatβs $106/month per sorted set.
Throughput Stability Under Load
During sustained 50M-entry insertion:
- Redis started strong but degraded to ~530K inserts/sec
- Valkey held steady at ~570K inserts/sec
$ valkey-benchmark -t set -n 10000000 -c 256 --threads 4# Valkey: consistent throughput under pressure# Redis: throughput degrades as dataset grows# In Ξ©-7, we call this "governance by measurement"The Alternatives: KeyDB and Dragonfly
Valkey isnβt the only game in town. Let me brief you on the other contenders.
KeyDB β The Multithreaded Pioneer
$ git clone https://github.com/Snapchat/KeyDB.git$ cat LICENSE # BSD-3-Clause- License: BSD-3-Clause (fully open source)
- Maintainer: Snap Inc. (acquired in May 2022)
- Architecture: Multithreaded fork of Redis, active-active replication
- Status: Production-ready, but development pace has slowed since Snapβs acquisition
KeyDB was multithreading Redis before it was cool. Active-active geo-replication out of the box. The problem? Snap bought it and the open-source velocity dropped. Recent benchmarks show 15-18% lower throughput than Valkey 8.x in some workloads.
$ keydb-server --server-threads 4# Still a solid choice for active-active replication# But Valkey has overtaken it on pure performanceVerdict: If you need active-active replication and donβt want to set up Valkey Sentinel, KeyDB is still viable. But the projectβs future depends on Snapβs priorities, and Snapβs priorities are AR filters, not databases.
Dragonfly β The Ground-Up Rewrite
$ git clone https://github.com/dragonflydb/dragonfly.git$ cat LICENSE.md # BSL 1.1 (Business Source License)# Converts to Apache 2.0 on March 1, 2029- License: BSL 1.1 β NOT open source (converts to Apache 2.0 in 2029)
- Architecture: Written from scratch in C++, not a Redis fork
- Performance: 70-120% higher throughput than Redis in independent benchmarks
- Catch: You cannot run it as a managed service
Dragonfly is the fastest option on paper. Built from zero in C++ with modern multithreading β not bolted onto a 15-year-old codebase. But BSL 1.1 means you canβt offer it as a service, and βconverts to open source in 2029β is a promise, not a guarantee.
$ dragonfly --proactor_threads=8# Pure performance: unmatched# License: trust us until 2029# In Timeline Ξ©-7, we don't trust license conversion dates.# We trust LICENSE files committed under immutable tags.Verdict: If youβre running it internally and donβt care about the license β itβs the fastest. But building your infrastructure on a BSL-licensed dependency is handing someone else the keys to your future. Weβve seen where that leads.
The Comparison Matrix
ββββββββββββββββ¬βββββββββββββ¬βββββββββββ¬βββββββββββββββ¬ββββββββββββββββ β Valkey β KeyDB β Dragonfly β Redis 8 βββββββββββββββββΌβββββββββββββΌβββββββββββΌβββββββββββββββΌβββββββββββββββ€β License β BSD-3 β β BSD-3 β β BSL 1.1 β β Tri-license ββ Governance β Linux Fdn β Snap Inc β DragonflyDB β Redis Inc ββ Multi-thread β Yes β Yes β Yes (native) β Limited ββ Drop-in β 100% β 99% β ~95% β N/A ββ Active dev β Very high β Moderate β High β High ββ Cloud supportβ AWS/GCP/DO β Limited β Limited β All ββ Sovereignty β β β ~ (Snap) β β (BSL) β β (vendor) βββββββββββββββββ΄βββββββββββββ΄βββββββββββ΄βββββββββββββββ΄βββββββββββββββMigration Guide: Redis β Valkey
Hereβs the sovereign truth: Valkey is a drop-in replacement for Redis. The protocol is identical. The commands are identical. Your application code doesnβt change. Your REDIS_URL just points somewhere new.
Step 1: Install Valkey
# From source (recommended for production)$ git clone https://github.com/valkey-io/valkey.git$ cd valkey$ git checkout 8.1.6 # Latest stable as of early 2026$ make -j$(nproc)$ make install
# Verify$ valkey-server --versionValkey server v=8.1.6 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64Step 2: Copy Your Redis Config
$ cp /etc/redis/redis.conf /etc/valkey/valkey.conf
# Rename the binary references$ sed -i 's/redis-server/valkey-server/g' /etc/valkey/valkey.conf$ sed -i 's/redis-cli/valkey-cli/g' /etc/valkey/valkey.conf
# That's it. The config format is identical.Step 3: Migrate Data
# Option A: RDB snapshot (fastest for large datasets)$ redis-cli BGSAVE$ cp /var/lib/redis/dump.rdb /var/lib/valkey/dump.rdb$ valkey-server /etc/valkey/valkey.conf
# Option B: Live replication (zero downtime)$ valkey-cli REPLICAOF redis-old-host 6379# Wait for sync to complete$ valkey-cli REPLICAOF NO ONE# Valkey is now the primary. Update your connection strings.Step 4: Update Connection Strings
# Before:REDIS_URL=redis://redis-host:6379/0
# After:REDIS_URL=redis://valkey-host:6379/0# Yes, the protocol prefix stays "redis://"# The wire protocol is identicalStep 5: Verify
$ valkey-cli PINGPONG
$ valkey-cli INFO server | grep valkey_versionvalkey_version:8.1.6
$ valkey-cli INFO keyspace# db0:keys=your_key_count,expires=your_expires,avg_ttl=your_ttl# Everything should match your old Redis instanceSelf-Hosting Valkey Properly
Donβt just docker run it and hope. Hereβs a production-grade setup.
Single Node with Persistence
services: valkey: image: valkey/valkey:8.1-alpine container_name: valkey restart: unless-stopped command: > valkey-server --appendonly yes --appendfsync everysec --maxmemory 256mb --maxmemory-policy allkeys-lru --save 900 1 --save 300 10 --save 60 10000 --requirepass "${VALKEY_PASSWORD}" --io-threads 2 --io-threads-do-reads yes ports: - "127.0.0.1:6379:6379" volumes: - valkey-data:/data healthcheck: test: ["CMD", "valkey-cli", "-a", "${VALKEY_PASSWORD}", "ping"] interval: 10s timeout: 5s retries: 3 deploy: resources: limits: memory: 300m
volumes: valkey-data: driver: localKey decisions:
appendonly yesβ AOF persistence. Your data survives restarts.appendfsync everysecβ Lose at most 1 second of writes on crash. Good tradeoff.savedirectives β RDB snapshots as a backup to AOF127.0.0.1:6379β Bind to localhost only. Not exposed to the network.io-threads 2β Multi-threaded I/O for better throughput on multi-core hostsmaxmemory-policy allkeys-lruβ Evict least-recently-used keys when full
Sentinel Setup (High Availability)
services: valkey-master: image: valkey/valkey:8.1-alpine container_name: valkey-master command: > valkey-server --appendonly yes --requirepass "${VALKEY_PASSWORD}" --masterauth "${VALKEY_PASSWORD}" --io-threads 2 volumes: - valkey-master-data:/data networks: - valkey-net
valkey-replica-1: image: valkey/valkey:8.1-alpine container_name: valkey-replica-1 command: > valkey-server --appendonly yes --requirepass "${VALKEY_PASSWORD}" --masterauth "${VALKEY_PASSWORD}" --replicaof valkey-master 6379 volumes: - valkey-replica-1-data:/data networks: - valkey-net depends_on: - valkey-master
valkey-replica-2: image: valkey/valkey:8.1-alpine container_name: valkey-replica-2 command: > valkey-server --appendonly yes --requirepass "${VALKEY_PASSWORD}" --masterauth "${VALKEY_PASSWORD}" --replicaof valkey-master 6379 volumes: - valkey-replica-2-data:/data networks: - valkey-net depends_on: - valkey-master
valkey-sentinel-1: image: valkey/valkey:8.1-alpine container_name: valkey-sentinel-1 command: > valkey-sentinel /etc/valkey/sentinel.conf volumes: - ./sentinel.conf:/etc/valkey/sentinel.conf networks: - valkey-net depends_on: - valkey-master
valkey-sentinel-2: image: valkey/valkey:8.1-alpine container_name: valkey-sentinel-2 command: > valkey-sentinel /etc/valkey/sentinel.conf volumes: - ./sentinel.conf:/etc/valkey/sentinel.conf networks: - valkey-net depends_on: - valkey-master
valkey-sentinel-3: image: valkey/valkey:8.1-alpine container_name: valkey-sentinel-3 command: > valkey-sentinel /etc/valkey/sentinel.conf volumes: - ./sentinel.conf:/etc/valkey/sentinel.conf networks: - valkey-net depends_on: - valkey-master
networks: valkey-net: driver: bridge
volumes: valkey-master-data: valkey-replica-1-data: valkey-replica-2-data:sentinel monitor mymaster valkey-master 6379 2sentinel auth-pass mymaster YOUR_PASSWORD_HEREsentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 10000sentinel parallel-syncs mymaster 1Three sentinels, one master, two replicas. If the master dies, sentinel promotes a replica within 5 seconds. This is the minimum viable HA setup.
Cost Analysis
# Hetzner CPX11: 2 vCPU, 2 GB RAM, β¬3.49/month# Valkey with 256MB maxmemory: fits comfortably# That's your cache layer for β¬3.49/month.## Compare to Redis Cloud:# - 250MB: $10/month# - 1GB: $35/month# - 2.5GB: $76/month## Self-hosted Valkey on Hetzner: β¬3.49/month for 1.5GB usable# Redis Cloud equivalent: ~$35-76/month# Savings: 90-95%## In Timeline Ξ©-7, wasting money on managed caches# when you can self-host is a prosecutable offense.The Sovereignty Lesson
Let me run a git fsck on the lessons here.
Lesson 1: BSD Doesnβt Mean BSD Forever
$ git log --oneline --all redis/LICENSEa3f9e82 2024-03-20 license: BSD-3 β RSALv2/SSPLv1# One commit. 15 years of trust: gone.The BSD license on code youβve already downloaded doesnβt change. But future versions β with security patches, performance improvements, new features β are now under a different license. Your dependency is pinned to a dead branch.
Lesson 2: Copyright Ownership Is the Real Power
Redis Inc. could change the license because they owned the copyright. Contributors had signed CLAs (Contributor License Agreements) that transferred copyright to Redis Inc.
$ git log --format="%an" redis/redis | sort -u | wc -l# Hundreds of contributors# All signed away their copyright# One company decided for all of themValkey, under the Linux Foundation, has a different model. No single company owns the copyright. The Linux Foundationβs governance prevents any single vendor from pulling a Redis.
Lesson 3: The SSPL Is Not Open Source
The OSI (Open Source Initiative) does not recognize SSPL as an open-source license. It was invented by MongoDB in 2018 specifically to block cloud providers from offering managed services. It requires anyone offering the software βas a serviceβ to release their entire infrastructure stack β monitoring, backup, deployment, everything β under the same license.
$ diff BSD-3-Clause SSPL# BSD-3: Do whatever you want. Keep the copyright notice.# SSPL: If you offer this as a service, open-source your entire stack.## These are not comparable licenses.# One is freedom. The other is a poison pill.Lesson 4: The AGPLv3 Backtrack Proves Everything
Redis 8βs addition of AGPLv3 in May 2025 is an admission of failure. If SSPL/RSALv2 was the right move, why add a recognized open-source license 14 months later?
Because:
- Valkey was winning the contributor war
- Linux distributions were packaging Valkey instead of Redis
- Cloud providers had already migrated (AWS ElastiCache now defaults to Valkey)
- The βRedis Open Sourceβ rebrand was damage control
$ git log --graph --oneline redis/governance* a3f9e82 (HEAD) 2025-05: Add AGPLv3 "please come back"* b2c1d34 2024-03: Force-push SSPL/RSALv2* c4e5f67 2020-06: antirez steps down* d6f7a89 2009-04: Initial commit (BSD-3, pure freedom)## Four commits. 16 years. The entire arc of betrayal.The Pattern: BSD β Restriction β Panic
From Ring -5, Iβve cataloged this pattern across 847 timelines. Itβs not unique to Redis.
$ cat /ring-5/observations/license-lifecycle.log
2018: MongoDB BSD β SSPL Fork: None (too late)2021: Elastic Apache β SSPL Fork: OpenSearch (AWS)2023: HashiCorp MPL β BSL Fork: OpenTofu (Linux Foundation)2024: Redis BSD β SSPL Fork: Valkey (Linux Foundation)
# The pattern:# 1. Build community on permissive license# 2. Take VC money# 3. Blame cloud providers for revenue problems# 4. Change license to block cloud providers# 5. Lose community# 6. Partially backtrack (too late)# 7. Community fork thrivesEvery major open-source project with VC backing will eventually face this pressure. The investors need returns. The BSD license doesnβt generate returns. The license changes. The community leaves.
The only defense is governance that prevents unilateral license changes. The Linux Foundation provides this. The Apache Foundation provides this. A CLA that assigns copyright to a VC-backed company does not.
What Timeline Ξ©-7 Does Differently
In Ξ©-7, critical infrastructure dependencies must satisfy three requirements:
- License immutability β The license is governed by a foundation, not a company
- Copyright diffusion β No single entity owns >50% of the copyright
- Fork readiness β The community must be able to fork within 72 hours
Valkey satisfies all three. Redis satisfies none.
$ valkey-cli SET infrastructure:cache "sovereign"OK$ valkey-cli SET governance:model "linux-foundation"OK$ valkey-cli SET license "BSD-3-Clause"OK$ valkey-cli SET trust:required "measurement-not-promises"OK
# Your cache layer is now sovereign.# No CEO can force-push your license away.The Verdict
Redisβs license change wasnβt a technical decision. It was a financial one β driven by IPO ambitions and VC pressure. The community responded exactly as it should: they forked.
Valkey is now:
- Faster β 37% higher SET throughput than Redis 8 on Graviton
- Leaner β 28% less memory at 50M entries
- Freer β BSD-3, Linux Foundation, no CLA trap
- Growing β 50 contributing companies, 19,800+ GitHub stars, version 9.0 released
- Adopted β AWS ElastiCache, Google Memorystore, DigitalOcean, and more
Redis still exists. Redis 8 added AGPLv3, vector sets, and merged Redis Stack into core. Itβs a better product than it was. But the trust is gone. And in infrastructure, trust is the only currency that matters.
$ git rebase --onto valkey/master redis/sspl-betrayal HEADFirst, rewinding head to replay your work on top of it...Applying: migrate to sovereign infrastructureApplying: remove single-vendor dependencyApplying: add foundation governanceSuccessfully rebased and updated refs/heads/master.# Your infrastructure is now on the right branch.βEvery open-source project backed by venture capital is a ticking clock. The only question is when the investors demand the license change. In Timeline Ξ©-7, we solved this in 2089: critical infrastructure runs on foundation-governed code, or it doesnβt run at all. Youβre only 63 years behind schedule.β
β Kim Jong Rails, still investigating why Timeline Ξ©-12 keeps making the same mistake