Yes, but a "smart contract" is not a (legal) contract: it's just a fancy name for "a software program that runs on a blockchain".
Thus, "smart contracts" behave like software programs (what happens is what is actually written in the "smart contract", not the intent that programmer had when he wrote it, nor the expectation of the user when he interacts with it), and not like legal contracts (where intents and expectations come into play, and courts can be involved for arbitration).
Besides, which exact court would have jurisdiction over a smart contract exploit that happens in Ethereum, for example? A court in the country of the person deploying the contract? A court in the country of the person that interacted with the contract and lost their assets? A court in the country of the (unknown) exploiter? A court in the country of the blockchain developers?
If you don't want to follow the rules (against anti-competitive practices) of a certain set of countries, perhaps you shouldn't have offices in that set of countries? Just an idea...
Okay, so they spin off a bunch of shell companies holding all these offices and stop displaying them on the Google website in order to address the EU requests. But the mothership still gets to remain a single company.
Maybe a better way to think about it is that the EU can effectively demonitize them. At the worst, the EU regulators could (theoretically) block them from doing business with EU citizens. They can offer their browser for download here alright, but they can't sell any ads or any other products here.
> You can ban sandwich shops in your city, and there wont be a viable model for sandwich shops.
No one banned sandwich shops (or paywalled newspapers) in this context, though.
The problem is that some "sandwich shops" wants to give out free samples (i.e. keeping paywall open for bots and other clients that don't run js), because they know it's good for business, and then complain that people are taking free samples.
Well... if this "handing out free samples" approach is not working out for them, it is up to them (and not everyone else) to figure out something that works for them.
If not enough people are willing to pay full-price for their (I assume) high-quality sandwhiches, and much rather source their sandwhiches from somewhere else (if there are no free samples to be had), that's not anyone's problem but their own.
You're making it seem like there is some regulamentory issue that prevents them from having/deploying a successful business model, when that's not the case: the problem is something else.
I agree that regulation was a bad example. I think a more accurate example is that consumers want high quality content, but dont want to pay and don't want advertising either.
Consumers saying come up with a business plan that gives me want for free in return for nothing are in for disappointment
I don't necessarily disagree with what you are saying. But, when the price of ignoring the problem for the consumer is "disappointment", rather than "bankrupcy", it still seems to me that it is not consumers that should be particularly worried.
As a consumer, I am more interested in avoiding my disappointment, than their bankruptcy. I also understand that there are some problems that can not be solved by business alone, some will require changing consumer attitudes.
It's a recent anti-pattern they added. Possible solution: replace the "twitter.com" portion of the URL by "nitter.net" and you won't be nagged by things like that.
Just a small comment: you can do things to ensure that the period of a PRNG is longer than a certain lower bound for any input seed. For example, if you make the state-mixing function depend on a 64-bit counter, you'll ensure that the period is at least 2^64 (assuming the state-mixing function is reversible).
Assuming its a permutation and you output the whole thing.
However, you wouldn't output the whole thing (or you instantly leak the state), and I think in that case you don't get an automatic useful guarantee about the period anymore: For some seeds you could have the whole 0..2^64-1 counter span just output a few repeating values (or even a constant).
In that case the 'state' has a long period, true, but the output doesn't. If instead you use a construction where the output is guaranteed to have a known (large) period, you can follow that up with whatever permutation you want, but to preserve the period all of the permutation must be output.
> Assuming its a permutation and you output the whole thing.
I'm assuming the state-mixing function is a permutation (i.e. the counter affects the whole state in a reversible way), but it is not required that the whole state is outputted.
> However, you wouldn't output the whole thing (or you instantly leak the state), and I think in that case you don't get an automatic useful guarantee about the period anymore: For some seeds you could have the whole 0..2^64-1 counter span just output a few repeating values (or even a constant).
The counter will always have the full period of 2^N (assuming N-bit counter), regardless of how it is initialized (i.e. regardless of seeding), as long as it is a simple "i = (i + 1) mod 2^N" counter.
What this does is to effectively change the (presumably fixed) state permutation function: instead of using a fixed one, you're applying a repeating sequence of 2^N slightly different state permutation functions, which ensures that the period of the state should be at least as large as that (and probably much larger).
Assuming the chosen state permutation function is reasonable (and does indeed mix the counter effectively), truncating the state to provide output should not lead to short cycles: if it does, then your permutation is probably not reasonable as primitive for a PRNG (i.e. you have worse problems in your generator than "small period").
For more information on the use of counters to ensure lower bounds on the periods of stream ciphers and PRNG, take a look at Rabbit [1] (or, in general, at the concept of "counter-assisted stream ciphers" [2]).
I don't disagree with anything specific that you said, but the reliance on "reasonable" means that you don't get a trivial guarantee about the lack of a short period from the structure itself.
The nice property that LFSR+non-linear-permutation-on-output schemes have is that by construction they give a guaranteed known gigantic period.
The counter and truncated permutation will do so if the permutation is reasonable. If lots of cpu time is allowed then I think it's likely that people will manage to select reasonable permutations. ... but when trying to shave off ever last cycle (as is the case for the RNGs discussed in this thread) it would be good to have a more concrete definition of reasonable.
> I don't disagree with anything specific that you said, but the reliance on "reasonable" means that you don't get a trivial guarantee about the lack of a short period from the structure itself.
I'm using "reasonable" here, because if the state-update function is an extremely weak and far-from-random permutation, like the identity, then the least-significant bits of the state will obviously display short cycles and, then, if your output function is also weak (e.g. simple truncation of most-significant bits), you may have short cycles in your output.
But, again, in such a case, you have a much bigger problem than "lack of lower bound on cycle length": your state-update function is not mixing your state, so you are 100% reliant on your output function to mix the state+counter. Also, if you go ahead and remove the counter, then you get a PRNG that always outputs the same thing (regardless of the chosen output function): clearly, you haven't picked a "reasonable" state-update function.
In a nutshell: if you don't actually have a PRNG (because both your state-update and output functions are trivially weak and non-mixing), then adding a counter won't magically turn it into a PRNG.
> The nice property that LFSR+non-linear-permutation-on-output schemes have is that by construction they give a guaranteed known gigantic period.
...and you get that guarantee from the fact that a LFSR is a counter. So you're just reinforcing what I said, and what is stated in the paper I linked to: adding a counter to a (stateful or stateless) nonlinear function is the best/easiest way to ensure a lower bound on the cycle length of a PRNG of arbitrary structure.
> If lots of cpu time is allowed then I think it's likely that people will manage to select reasonable permutations. ... but when trying to shave off ever last cycle (as is the case for the RNGs discussed in this thread) it would be good to have a more concrete definition of reasonable.
The chosen permutation does not have to have any special properties other than the ones that are already required for any usual PRNG (things like "changing a bit in the input should change each output bit with a probability of about 1/2").
The concrete definition of a "reasonable" PRNG is: either the state-update function or the output function of the PRNG must effectively mix the state (or both). Adding a counter will not turn an "unreasonable" PRNG into a "reasonable" PRNG: it will only take a "reasonable" PRNG and turn it into a "reasonable PRNG with lower bound on its cycle lengths".
Computer programs are as copyrightable as literary works, and generally are counted as such within the context of copyright (see https://wipolex.wipo.int/en/text/295166). Please point out where it is determined that one has to demonstrate the "creativity" of a literary work before it is protected by copyright laws.
Oh, please. 2+2=4 is not copyrightable. I’d further that any program in a CS101 textbook is equally uncopyrightable. Computer programs are only copyrightable to the degree that they contain creative expression. Purely functional expressions are not copyrightable, regardless of the creative effort to derive them.
"2+2=4" is a computer program as much as "Hello world" is a literary work: you need to use better strawmen.
> I’d further that any program in a CS101 textbook is equally uncopyrightable.
Are you suggesting that the computer program that is the subject of this thread has the same creativity level as "2+2=4" or that of "any program in a CS101 textbook"?
Also, notice that your opinion on whether something is creative enough or not is pretty much irrelevant as far as copyright law is concerned.
> Purely functional expressions are not copyrightable, regardless of the creative effort to derive them.
Ok, so now you only need to demonstrate that the thing we are talking about (and not some other arbitrary hypothetical example) is a "purely functional expression" and not a "creative expression". Good luck with that.
Ok, I’ll put it this way. If every homework submission for a particular CS101 assignment was essentially identical, it’s not creative, it’s functional. That’s what I mean by 2+2=4.
Oracle tried to hang Google with copied code for max(x,y), which returned the greater of two parameters. That’s what you get when every single byte of software is a “literary work” worthy of independent copyright protection. Bullshit.
The issue is when does an expression of creativity manifested in code become uniquely copyrightable?
I mean... I empathize with your feeling. I'm not telling you how I think things should be, but more about how things are, in practice. In practice, algorithms are not copyrighteable, but specific implementations of algorithms are copyrighteable (and, by default, are copyrighted as soon as they are set in some fixed medium).
The issue of whether something is creative enough to warrant authorship rights or any other type of IP rights can be, as you know, murky, and sometimes has to be decided in court. Taking your example, if Google literally copied the code verbatim (rather than re-writing it themselves), then... technically... I guess it is a copyright violation (though not something serious).
The thing is... when you have something trivial that can be efficiently implemented in a very limited (and trivial) set of ways (e.g. 2+2=4, the definition of max(x,y)), it's easy to argue that it is plausible that you didn't copy the code (i.e. that you just independently reimplemented it yourself and it accidentally ended up looking exactly like someone else's implementation). On the other hand, when you have a large codebase, it becomes much harder to argue that (unless you use some obscene levels of obfuscation... and, even then...).
Are you really trying to argue that TikTok didn't just blatantly take large pieces of code from this opensource project? I didn't look into it too hard, but it seems like OBS might have a case here, unless we're assuming that this codebase has the complexity level of "2+2=4" and that TikTok just accidentally it.
Oh, the original topic? I didn’t consider it at all. I was just discussing copyright and how it applies to code. The Oracle/Google dust up was a great example of such ambiguity, and it didn’t help in drawing lines in the future.
As to how it works now? I agree with you.
But listen to the argument you’re making: The otherwise uncopyrightable functional code expression becomes copyrightable if and only if it is copied by another. The exact same expression, still uncopyrightable, is only free to use if independently created and only by those that created the expression, who may then restrict or license the uncopyrightable expression as they wish.
I would argue that everything creative has a functional side and everything functional has a creative side. The question is: where do we draw the line? How creative should something be before it is copyrightable and how functional should it be before it's not?
Currently, precedent is on the side of code being copyrightable.
What if I lift a minor function? What if I study yours and base mine off of it? What if I type it all except for three lines I pasted from yours? The whole idea that a recipe can be owned is fascinating.
Actual recipes, btw, are not considered copyrightable.
They generally do open source their crypto systems (at least the algorithms themselves), given that that is practically a requirement for any crypto system to be adopted in a widespread way (no one who is serious about security is going to use home-baked closed-source cryptosystems).
Note that no one is complaining about them locking-out "new identities" (which could be easy to create), but about them locking-out "old identities that have paid thousands of dollars to them" (which are not as easy to create), without any reasonable recourse option.
I'm sure your shred of sympathy would quickly disappear if this ever happened to you, but... as the saying goes... "pepper in someone else's eyes is a refreshment to me".
Seems like the person in question re-invented "NNLS chroma" or "Harmonic Pitch Class Profiles", which are often used for automatic chord transcription and related tasks.
Thus, "smart contracts" behave like software programs (what happens is what is actually written in the "smart contract", not the intent that programmer had when he wrote it, nor the expectation of the user when he interacts with it), and not like legal contracts (where intents and expectations come into play, and courts can be involved for arbitration).
Besides, which exact court would have jurisdiction over a smart contract exploit that happens in Ethereum, for example? A court in the country of the person deploying the contract? A court in the country of the person that interacted with the contract and lost their assets? A court in the country of the (unknown) exploiter? A court in the country of the blockchain developers?