valkey
valkey copied to clipboard
Get rid of trademark
Get rid of the Redis name, except where it's needed for API compatibility. This can be done once we have a name.
Some of the below changes have a low risk of breaking e.g. script parsing logs or INFO output, but I'd say those are acceptable.
-
:ballot_box_with_check: Make variables
REDIS_CFLAGSandREDIS_LDFLAGS. Done in 38632278fd06fe186f7707e4fa099f666d805547. They were renamed toSERVER_*. -
[x] #148
-
[x] #204
-
[x] #207
-
[x] Occurrences of "Redis" in command JSON files (
src/commands/*.json) #35 -
[x] #41
# Server redis_version:255.255.255 redis_git_sha1:daadbca2 redis_git_dirty:1 redis_build_id:187c43196ce2ead2 redis_mode:standaloneWe have two options:
- Change to "server_version" (etc.) and also add a "server_name:newname"
- Change the prefix, e.g. "newname_version", etc.
-
[x] #61
> hello 3 1# "server" => "redis" 2# "version" => "7.2.4" (...) -
[ ] #280
-
[x] #144
-
[x] #137
-
[x] #134
-
[x] #135
-
[x] #136
-
[x] Rename the binaries to
redis-server,redis-sentinel,redis-check-rdb,redis-check-aof,redis-cli,redis-benchmarkand their corresponding .c and .h files. Done in 38632278fd06fe186f7707e4fa099f666d805547. -
[ ] #153
-
[x] #147
-
[x] #146
-
[x] #321
-
[x] #354
REDISMODULE will be changed as well? such as XXXMODULE? ^_^
REDISMODULE will be changed as well? such as XXXMODULE? ^_^
We break existing modules if we do that, right? We can provide a compatibility layer of some sort, deprecate the old names and phase then out after 1-2 major versions...?
Changes to handle trademark violation
External Facing
- Clients
- Do we need separate client(s)?
- Compatibility (what are we compatible with?)
- Can we advertise “RESP” (Redis Serialization Protocol) compatibility?
- API compatibility (client agnostic?)
- Data (Snapshot/Replication)
- RDB compatibility
- import/export rdb
- versioning and identification (if we change to different numbering)
- PSYNC
- AOF
- RDB compatibility
- Cluster Compatibility i. Redis Cluster begins with “RCmb” header stands for Redis Cluster Message Bus.
- Modules API
- LUA
- Monitoring and Metrics
- Redis INFO metrics
- Server information
- Redis INFO metrics
- Commands
- HELLO response
- server name - Redis
- server version - x.x.x
- HELLO response
Internal code changes
- Binaries/tooling
- redis-server
- redis-cli
- Tooling name
- connection scheme
- redis-benchmark
- redis-trib
- redis-check-rdb
- redis-check-aof
- redis-sentinel
- Dependencies
- hiredis
- Shared Objects
- redis-tls.so
- Configuration
- redis.conf
- self name
- config - pidfile path
- config - aclfile path
- version.h
- redis.conf
- Child Process(es)
- redis-aof-rewrite
- Code comments (2986 occurence in 381 files)
- Function and variable naming (2986 occurence in 381 files)
- Module API changes in test modules
I was gathering information on similar lines. Feel free to update the top level if you find anything interesting.
There are lots of questions here. I think we need to ask some law folks or check the source code of other forks, how much they changed.
https://dba.stackexchange.com/questions/149586/why-does-mariadb-still-use-the-mysql-name-everywhere-within-the-file-system
MariaDB obviously didn't rename everything at once.
mysql is a simple SQL shell (with GNU readline capabilities). MariaDB starting with 10.4.6
From MariaDB 10.4.6, mariadb is a symlink to mysql. MariaDB starting with 10.5.2
From MariaDB 10.5.2, mariadb is the name of the script, with mysql a symlink .
REDISMODULE will be changed as well? such as XXXMODULE? ^_^
We break existing modules if we do that, right? We can provide a compatibility layer of some sort, deprecate the old names and phase then out after 1-2 major versions...?
Changing REDISMODULE_* should be fine. The only binding contract is the API prefix and the layout of the relevant structures such as RedisModule_GetApi being the first entry of the module ctx. We can freely change the struct/field names.
On module load, the existing modules will be looking for RedisModule_* APIs. We can double-register on the server side with both prefixes (RedisModule_ and XXXXModule_) but only expose the binding to XXXXModule_ in the new module header. This way, modules compiled against our codebase will use the new API prefix and modules compiled against the Redis codebase will still be able to locate these functions using the old prefix.
The higher level question though is the semantics of these APIs. I don't foresee this being a problem in the near term. Overtime, however, behavior will diverge for sure, regardless of our efforts. There will be a point where such compatibility is no longer needed nor desired but this will take quite some time, i.e. years if I may guess.
There are lots of questions here. I think we need to ask some law folks or check the source code of other forks, how much they changed.
Agreed and I like your approach of making incremental and small changes one at a time.
On module load, the existing modules will be looking for
RedisModule_*APIs. We can double-register on the server side with both prefixes (RedisModule_andXXXXModule_) but only expose the binding toXXXXModule_in the new module header. This way, modules compiled against our codebase will use the new API prefix and modules compiled against the Redis codebase will still be able to locate these functions using the old prefix.
So, registering on the server side for RedisModule_ wouldn't be a trademark violation?
So, registering on the server side for
RedisModule_wouldn't be a trademark violation?
This goes back to @zuiderkwast's earlier comment (https://github.com/placeholderkv/placeholderkv/issues/25#issuecomment-2018976668).
I guess one option could be to make it optional, i.e., controlled by a "compat" config, which could be used more broadly too. This way, we don't register RedisModule_ by default and the decision would be left to the end user.
So, registering on the server side for
RedisModule_wouldn't be a trademark violation?This goes back to @zuiderkwast's earlier comment (#25 (comment)).
I guess one option could be to make it optional, i.e., controlled by a "compat" config, which could be used more broadly too. This way, we don't register
RedisModule_by default and the decision would be left to the end user.
Yeah, will be good to understand this. We're walking a tightrope here. compatibility vs getting sued.
So, registering on the server side for
RedisModule_wouldn't be a trademark violation?
I'm not sure, but it might be "fair use" or something to keep backward compatibility. I'm not sure.
Renaming REDISMODULE macros and structs still makes us ABI-compatible, but not source code compatible, i.e. old modules can't just include our placeholdermodule.h file and expect their module to compile. But that may not be a huge issue either. We can give them a one-liner sed script to update their module code.
Do we want to create a compatibility layer for the lua. You can do use either placeholderkv.call() and redis.call()? It seems like we're also proposing the same thing for modules. Being able to have either RedisModule_ and PlaceHolderKV_ both generate ABI compatible files.
Cluster Compatibility Redis Cluster begins with “RCmb” header stands for Redis Cluster Message Bus.
Since this is part of the contract, I think we can leave it.
I'm a bit confused. The timeline for trademarks seems to be roughly this:
2009: Redis is publicly released as an open source project. 2011: Redis labs is founded. 2018: Redis labs ltd filed a trademark application for some uses of Redis (was opposed by Rackspace at the time). 2021: Redis labs changes name to Redis. Last month: Redis ltd files a trademark application for Redis-the-database (still pending) .
If they thought that they actually had exclusive rights on Redis the database, why would they have filed a last-minute trademark application?
Another 2 issues we need to change:
- RESP (Redis Serialization Protocol) We need change.
- RDB file rename: RDB represents Redis Database
What is the conclusion for Redis modules and LUA scripting? If I understand it correctly, the changes proposed mainly allow new modules and lua script invocations to use new prefix instead of Redis* prefix. I would say, that's not a high priority currently given large Redis user-base. We can take it up after launching first stable version that's fully compatible with 7.2 version (or the version that we decide).
So, registering on the server side for
RedisModule_wouldn't be a trademark violation?I'm not sure, but it might be "fair use" or something to keep backward compatibility. I'm not sure.
My understanding is that where we are providing an implementation of an interface (and this goes for APIs, protocols, on-disk formats, etc) it is very difficult for some other party to argue that this is protected (by either copyright or trademark).
My understanding is that where we are providing an implementation of an interface (and this goes for APIs, protocols, on-disk formats, etc) it is very difficult for some other party to argue that this is protected (by either copyright or trademark).
This is the same guidance I've been given. If we're implementing against or providing a functional interface, it's unlikely to hold up. I still think we should aim to remove the Redis mark from our project, but we should do so methodically and carefully, leaving behind what we believe is necessary.
Another 2 issues we need to change:
1. RESP (Redis Serialization Protocol) We need change. 2. RDB file rename: RDB represents Redis Database
If the references are directly to "RESP" (the network protocol) and "RDB" (the on-disk format) they are not a problem and IMO these should not be changed. They are important points of compatibility with the previous project.
@hwware Can you crate two separate issues for how we might break RDB and RESP in the future though. We have a problem with the RDB version, in that we can't stay compatible with the Redis community edition. At some point we'll need to change the 🪄 https://github.com/placeholderkv/placeholderkv/blob/unstable/src/rdb.c#L1395.
For RESP, it seems less likely this will change. But, we should at least have an issue pinned for discussion about it.
Moved from here, As far as I know, redis_mode is used in many places:
-
StackExchange.Redis: Determine the startup mode through
redis_modeas standalone, cluster or sentinel. https://github.com/StackExchange/StackExchange.Redis/blob/main/src/StackExchange.Redis/ResultProcessor.cs#L872 -
Prometheus Exporter, use
redis_modeto display instance_info. https://github.com/oliver006/redis_exporter/blob/master/exporter/info.go#L168
I think we should start a separate issues to let sdk/tool developers report their commands or fields that depend on Redis. (If possible, the best approach is to not change these old fields)
@yangbodong22011 We have no plans on removing "redis_mode". Where did you get from?
@yangbodong22011 We have no plans on removing "redis_mode". Where did you get from?
Just some of the risk points that I can think of that may not cause compatibility.