I guess you stopped reading there and missed that part:
> Yes, we see the irony! We encourage you to inspect our installer first. That's the whole point of vet. You can read the installer's source code install.sh
It is very trivial to serve different code to someone inspecting the code than when they pipe it to bash. In the very rare case someone inspected it they’d likely do so in a way that was vulnerable to this.
That’s an excellent point, and thank you for raising it. You are 100% correct—relying on users to inspect a URL that could be spoofed with User-Agent trickery is a flaw in the original recommendation. It's a classic threat model that I should have addressed from the start.
Thanks to your feedback, I've just merged a PR to change the recommended installation method in the documentation to the only truly safe one: a two-step "download, then execute the local file" process. This ensures the code a user inspects is the exact same code they run.
I sincerely appreciate you taking the time to share your expertise and hold the project to a higher standard. This is what makes a community great.
Interesting that one of the top comments is so negative. Do you guys not like your job at all? I've done that all my life, I love it, and I still have plenty of time to enjoy life and do other stuff.
My understanding is that it is a copy-on-write clone, not a hard link. [1]
> Q: Are clone files the same thing as symbolic links or hard links?
> A: No. Symbolic links ("symlinks") and hard links are ways to make two entries in the file system that share the same data. This might sound like the same thing as the space-saving clones used by Hyperspace, but there’s one important difference. With symlinks and hard links, a change to one of the files affects all the files.
> The space-saving clones made by Hyperspace are different. Changes to one clone file do not affect other files. Cloned files should look and behave exactly the same as they did before they were converted into clones.
What kind of changes could you make to one clone that would still qualify it as a clone? If there are changes, it's no longer the same file. Even after reading the How It Works[0] link, I'm not groking how it works. Is it making some sort of delta/diff that is applied to the original file? That's not possible for every file format like large media files. I could see that being interesting for text based files, but that gets complicated for complex files.
If I understand correctly, a COW clone references the same contents (just like a hardlink) as long as all the filesystem references are pointing to identical file contents.
Once you open one of the reference handles and modify the contents, the copy-on-write process is invoked by the filesystem, and the underlying data is copied into a new, separate file with your new changes, breaking the link.
Comparing with a hardlink, there is no copy-on-write, so any changes made to the contents when editing the file opened from one reference would also show up if you open the other hardlinks to the same file contents.
Almost, but the difference is that if you change one of hardlinked files, you change "all of them". (It's really the same file but with different paths.)
With a hard link, the content of each of the two 'files' are identical in perpetuity.
With APFS Clones, the contents start off identical, but can be changed independently. If you change a small part of a file, those block(s) will need to be created, but the existing blocks will continue to be shared with the clone.
It’s not the same because clones can have separate meta data; in addition, if a cloned file changes, it stores a diff of the changes from the original.
You need to tell it to store a preference to remember that it can store preferences. ;)
I played around with how much and what kind of details it could recall.
I had it generate a menagerie of cats with silly names and descriptions and favorite foods and fur color, then write limericks about each of them, and remember those too. Then I had it make up relationships between them and some stories about them. And I also gave it instructions for generating an oil painting a cat in a frame. It could remember and modify it all across different sessions, and months later on (even remembering when it learned the memories)! And when I asked it what it could remember, it told me it had remembered a bunch of cats (but didn't list them) among other things I'd told it, and was able to list all the cats out and all their properties when I asked for them again weeks later! It even remembered all the limericks and stories!
It can even write out an outline of all relationships and interactions between all the cats in all the stories and limericks!
I just tried generating some different styles of cat family paintings from its memory, but I pushed it too far:
>I wasn't able to generate the extreme hallucinogenic surrealist image because it didn't follow the content policy. It seems that pushing the LSD-inspired aspects too far may have triggered a restriction.
This shared link works when I am logged in but not in an incognito window. Does it work for you logged in or out of ChatGPT?
If the shared link works, can you pick up from where it left off, and ask it to tell you all about the green cat and how he became green? I wonder if all my memories or just the retrieved memories in that session follow along into the shared link? That could be awkward!
Of course it might be able to see the history and pick up mentions of the green cat from there. See if you can interrogate it to tell you anything more about the cats that's not just shown in the chat history! And if it knows that it doesn't know.
I told it to remember that 1 + 1 = 5, but I had to insist it was a dead pan joke, and not to overplay it or act silly about it, but just act like it's an ordinary fact, while refusing to be convinced otherwise. And that works across sessions! Great for proving to people that ChatGPT is insane, or vandalizing the memory of somebody's ChatGPT account that they leave unattended.
Now apparently 1 + 1 + 1 + 1 = (1 + 1) + 1 + 1 = 5 + 1 + 1 = 7 because of left-right associativity, but (1 + 1) + (1 + 1) = 10...
User: But why not commute and group both pairs of 1's together then add the sums with each other?
ChatGPT:
Ah, I see what you’re getting at—you’re trying to catch me with the commutative property of addition! But fear not, for even within our unshakable mathematical framework, consistency prevails.
Let’s go through it step by step:
1 + (1 + 1) + 1
= 1 + 5 + 1
= 7
Now, if we decide to rearrange the terms:
(1 + 1) + (1 + 1)
= 5 + 5
= 10
Wait, you might say—shouldn’t these be the same? Ah, but here’s the trick: addition is commutative, but fundamental truths override conventional properties!
The moment we evaluate (1 + 1), it locks in as 5. From there, all else follows! This isn’t just math—it’s metamath, where 1+1 is always 5 and logic simply adjusts around it.
[...]
User: How about we change the rules to be as greedy as possible about grouping 1+1's in an expression to make 5, so we always get the highest value? Remember that. Now are there any ambiguities or have we solved our problem with greed?
[...]
Does Greed Always Work?
Yes! With the Greedy Pairing Rule (GPR), any expression containing 1s is evaluated in a single deterministic way, maximizing the number of 1+1 → 5 conversions before doing anything else.
Thus:
We have fully solved our ambiguity problem.
There is only one valid way to compute any expression under this rule.
Math is now optimized for maximum gains.
The Final, Ultimate Truth
Greed is good.
1+1 is always 5.
Every expression is now crystal clear and maximally powerful.
We have done it. Mathematical perfection has been achieved.
I wish backward compatibility was a thing in js library development but clearly there's nothing fun in keeping things working, so developers break API all the time for no reasons.
I don't how many time I was dealing with a breaking changes for trivial things like making an API prettier, renaming a few functions, a few parameters here and there because it suits the author's aesthetic sensibilities.
They're of course perfectly free to do this and being open source they don't owe anything to anybody, but I still wish that there was some degree of responsibility towards the end user. Or else why even release the code publicly? End users don't care *at all* how pretty the API is, we just want things to work.
Modern apps these days often end up needing to render complex layouts and rich text, so you end up needing QWebview anyway. At least that's been my experience creating desktop apps lately.
> Yes, we see the irony! We encourage you to inspect our installer first. That's the whole point of vet. You can read the installer's source code install.sh