• 0 Posts
  • 40 Comments
Joined 1 year ago
cake
Cake day: July 31st, 2023

help-circle



  • So if I steal something from someones vacation home and return it before they visit, its not stealing either right? Thats residential piracy is it?

    It’s still theft. You intended to and successfully managed to deprive someone of their property, albeit temporarily. You would also still end up in front of a court for trespassing and breaking and entering.

    How about I love a painting so much but I’m an asshole and I think artists don’t deserve to be paid for art, so I sneak in while he’s sleeping, with a replica in tow, and swap out his real painting for the identical fake.

    Still theft, but with copyright infringement on top. You have deprived the artist of his property—his physical copy of the painting.

    I don’t know what changed over the years really, it was stealing in the 90s and stealing in the 00s, and then some people figured if they just said it wasnt stealing enough it would stick?

    People unquestionably accepting falsehoods is what changed. Have you noticed that when pirates do get caught and taken to civil or criminal court, it’s for copyright infringement, computer fraud and abuse, wire fraud, or something else tangential to theft but not actually theft? It’s because digital piracy is legally not “theft”.

    its hard to argue you should get all your games for free just because, oh well nothings lost.

    I am not making that argument.

    I even pirate games but I’m not afraid to call it stealing.

    I don’t, and I still wouldn’t call your digital piracy stealing. In English-speaking countries, at least, the law considers it to be copyright infringement.

    In the same vain, I wouldn’t call randomly sucker-punching someone “assault”: it’s battery.


  • pivot_root@lemmy.worldtomemes@lemmy.worldSorry Ubisoft
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    29 days ago

    Because it’s not—by definition—stealing?

    Theft is the taking of another person’s personal property with the intent of depriving that person of the use of their property. Also referred to as larceny.

    Source

    Digital piracy is:

    • Copying, not taking.
    • Not affecting personal property.
    • Not depriving the creator of their property.

  • pivot_root@lemmy.worldtomemes@lemmy.worldSorry Ubisoft
    link
    fedilink
    arrow-up
    8
    ·
    edit-2
    30 days ago

    I mean, digital piracy isn’t stealing regardless of the premise that buying ≠ owning.

    Stealing is taking another’s property without the intent to return it. Making a digital copy is not taking any property, it’s creating a reproduction of it. The only place left to argue that piracy is stealing would be to say that you’re stealing the company’s theoretical revenue… but that revenue was never tangible property, being that it’s your money up until the moment you give it to them. Piracy is, and only is, copyright infringement.













  • That’s not the point, though. The point is to use a nominal type that asserts an invariant and make it impossible to create an instance of said type which violates the invariant.

    Both validation functions and refinement types put the onus on the caller to ensure they’re not passing invalid data around, but only refinement types can guarantee it. Humans are fallible, and it’s easy to accidentally forget to put a check_if_valid() function somewhere or assume that some function earlier in the call stack did it for you.

    With smart constructors and refinement types, the developer literally can’t pass an unvalidated type downstream by accident.


  • You’re going to need to cite that.

    I’m not familiar with C23 or many of the compiler-specific extensions, but in all the previous versions I worked with, there is no type visibility other than “fully exposed” or opaque and dangerous (void*).

    You could try wrapping your Foo in

    typedef struct {
        Foo validated
    } ValidFoo;
    

    But nothing stops someone from being an idiot about it and constructing it by hand:

    ValidFoo trustMeBro;
    trustMeBro.validated = someFoo;
    otherFunction(trustMeBro);
    

    Or even just casting it.

    Foo* someFoo;
    otherFunction((ValidFoo*) someFoo);
    

  • If it were poorly designed and used exceptions, yes. The correct way to design smart constructors is to not actually use a constructor directly but instead use a static method that forces the caller to handle both cases (or explicitly ignore the failure case). The static method would have a return type that either indicates “success and here’s the refined type” or “error and this is why.”

    In Rust terminology, that would be a Result<T, Error>.

    For Go, it would be (*RefinedType, error) (where dereferencing the first value without checking it would be at your own peril).

    C++ would look similar to Rust, but it doesn’t come as part of the standard library last I checked.

    C doesn’t have the language-level features to be able to do this. You can’t make a refined type that’s accessible as a type while also making it impossible to construct arbitrarily.