Comments (23)
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.
from valkey.
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.
from valkey.
REDISMODULE will be changed as well? such as XXXMODULE? ^_^
from valkey.
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?
from valkey.
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...?
from valkey.
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.
from valkey.
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.
from valkey.
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.
from valkey.
Another 2 issues we need to change:
- RESP (Redis Serialization Protocol) We need change.
- RDB file rename: RDB represents Redis Database
from valkey.
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).
from valkey.
Moved from here, As far as I know, redis_mode
is used in many places:
-
StackExchange.Redis: Determine the startup mode through
redis_mode
as standalone, cluster or sentinel. https://github.com/StackExchange/StackExchange.Redis/blob/main/src/StackExchange.Redis/ResultProcessor.cs#L872 -
Prometheus Exporter, use
redis_mode
to 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)
from valkey.
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.
from valkey.
from valkey.
MariaDB obviously didn't rename everything at once.
mysql is a simple SQL shell (with GNU readline capabilities).
MariaDB starting with 10.4.6From MariaDB 10.4.6, mariadb is a symlink to mysql.
MariaDB starting with 10.5.2From MariaDB 10.5.2, mariadb is the name of the script, with mysql a symlink .
from valkey.
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.
from valkey.
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.
from valkey.
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?
from valkey.
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.
from valkey.
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.
from valkey.
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).
from valkey.
@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.
from valkey.
@yangbodong22011 We have no plans on removing "redis_mode". Where did you get from?
from valkey.
@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.
from valkey.
Related Issues (20)
- []Defrag level is calculated correctly HOT 1
- [NEW] Cluster support without special client bindings HOT 2
- [NEW] Opt-in for inclusive language (primary/replia in ROLE reply, CLUSTER SHARDS, etc.) HOT 4
- Regression from PR #445 Incorrectly Allows Slot Ownership Updates via Replica HOT 1
- Followup items from https://github.com/valkey-io/valkey/pull/758
- [NEW] Better branching strategy for Valkey HOT 10
- [Test Case Fail]External Server Tests HOT 3
- [BUG] nodes.conf can be corrupted when node is restarted before cluster shard ID stabilizes (for 7.2) HOT 5
- [BUG] CLUSTER SHARDS command returns "empty array" in slots section HOT 5
- [NEW] Can we add 'count' option to the 'RANDOMKEY' command? HOT 5
- [NEW] Nightly builds for Docker HOT 1
- Update rioconnwrite size from https://github.com/valkey-io/valkey/pull/60 HOT 5
- Missing Check for Sender's Config Epoch Before Accepting Primary Claim
- Blocking commands are marked as being nested
- [NEW] Enhanced Function API: off-thread JSON/MsgPack decoding of args and encoding of response HOT 1
- [Daily CI] Based line for Daily CI status (All test cases can passed)
- [BUG] `CLIENT CAPA redirect` may result in bouncing redirects during failover HOT 10
- [BUG]In big cluster Redis (Valkey) replica node is not able to sync since 6.2.11 HOT 2
- [NEW] Introduce server level network ingress / egress metrics for cluster bus. HOT 1
- [BUG] Replica can run cross-slot MULTI/EXEC, upon module hooks on primary HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from valkey.