• 0 Posts
  • 98 Comments
Joined 6 years ago
cake
Cake day: January 21st, 2021

help-circle

  • We actually do. Libraries are traditionally named something like libfoo1.2.3.so. Then there are symlinks from libfoo1.so and libfoo1.2.so. This way you can depend on libfoo1.2.so and it works fine even if the user has libfoo 1.2.6.

    Now there are lots of problems here.

    1. It would require distros to ship multiple versions. This is a lot of maintenance work so it typically only done for very core libraries.
    2. It requires applications to accurately express their dependencies.
    3. It doesn’t work very well for version ranges beyond patches (I need at least version 1.2, but version 1.3 is also fine).
    4. It requires the library maintain binary compatibility which is difficult to do in C and C++.

    So yes, shared libraries and careful management is more elegant and efficient. But like so many things worse is better so “It works on your machine? We’re shipping your machine”.



  • If you only take the bottom (lowest) 1% of all frame rate measurements (and average them)

    I don’t think that is the methodology. I think it is taking the 99th percentile frame time. So basically if took the time it took to generate every single frame this is the time that 99% of frames were faster than and 1% were slower than.

    If this number goes down it means that the worst frames are less bad. This is a pretty important part of the experience as even if you have good average frame time (and decent FPS) having a few slow frames really makes the game feel choppy and can make precise inputs difficult.


  • In theory it is safe. When a Nix package is built it isn’t “installed”. Unless root is running/installing random packages out of the Nix store there is no problem. As long as the user’s aren’t added to the trusted-users option they shouldn’t be able to cause any problems for other users.

    However like any multi-user system you are sharing a Linux kernel. A kernel is a very complex piece of software with a huge attack surface. Privileged escalation vulnerabilities are commonly found. (This also applies to the nix-daemon, but it is a bit smaller attack surface but vulnerabilities are still occasionally found.) So you shouldn’t assume strong security isolation. I would say that a setup like this is acceptable for mostly-trusted people like coworkers or friends that are not expected to actively exploit vulnerabilities but definitely wouldn’t let random unknown users use the system.

    So if you want strong isolation use a VM or separate hardware, but then you won’t be able to share the builds and packages defeating the point in this case.




  • I’ve definitely ran into the situation where I fucked something up half-way though installing a new distro, then had to wipe it to go back to an old distro so that I could access the internet and find out what I did wrong so that I could start from scratch.

    I hate doing debugging on my phone, but man sometimes is it better than the alternative.



  • Yes, on one hand every commit to nixpkgs needs review (to some degree) on the other hand there are far too many committers to nixpkgs.

    There are also gaps such as the bots to auto-merge packages with maintainer approval, so a simple attack looks like this:

    1. Submit a package with you as a maintainer.
    2. Create a new GitHub account and send a malicious update to that package.
    3. Use a bot to merge with maintainer approval.

    So nixpkgs is better than the AUR, but it isn’t great and unlike Arch has no separate official repos.


  • https://xkcd.com/1200/ comes to mind.

    Games have no sandboxing anyways. They can access most of the data on the systems on which they run. Whether the game, crack or a HV crack makes little difference.

    Sure, running a hypervisor or kernel level does allow them a bit more access, mostly around persistence. But I don’t think it is a huge difference to most people.

    So IMHO you are already putting a lot of trust in any pirated software or crack, hypervisor bypasses are really just a small matter of degree. If you don’t trust the crack don’t run it. Easy as that. Or if you want robust protection run games on dedicated hardware with no personal information or in a dedicated untrusted gaming VM.


  • The fact is that it depends and it is a bit confusing for people not familiar. But it isn’t hard to get used to.

    +8Q, Paris isn’t specific enough. There are multiple +8Q inside Paris. It can also be a bit risky to make short codes like this especially with larger cities as different maps may put the city in different spots.

    What does work is +8Q Eiffel Tower which is useful for something like “Meet me here by the Eiffel Tower” or “I’m right here” when you are texting someone you are meeting and you know you are close but can’t see each other.

    So you end up with a few common options:

    • +8Q Eiffel Tower We are pretty close together but need to get the exact spot.
    • V75V+8Q Paris, France For exact spots around a known area.
    • 8FW4V75V+8Q For fully qualified with no reference needed.

    And a few less useful options:

    • 8FW4V7+ This large part of a city.
    • 8FW4+ This part of the country.
    • 8F+ This area of the world.

    If I was designing the system I don’t think I would have done this “trailing zeros assumed” approach. Because IMHO for day-to-day use V75V+ Would be more useful as a shortcut for ????V75V+ rather than the actual V75V????+ showing a rough location on a human scale (in this case the Eiffel Tower park is pretty clearly targeted) rather than an area larger than a city. But that is really the only complaint I have.







  • I’m also not familiar. But my understanding is that the package maintainers should prevent this situation. Because otherwise even if there are package version dependencies (I don’t actually know if pacman does this) it would just block the update which results in a partial update which isn’t supported. For example if your theoretical unmaintained Firefox blocks the update of libssl but Python requires new functionality you would be stuck in dependency hell. Leaving this problem to the users just makes this problem worse. So the package maintainers need to sort something out.

    It is a huge pain when it happens but tends to be pretty rare in practice. Typically they can just wait for software to update or ship a small patch to fix it. But in the worst case you need to maintain two versions of the common dependency. In lots of distros very common dependencies tend to get different packages for different major version for this reason. For example libfoo1 and libfoo2. Then there can be a period where both are supported while packages slowly move from one to the other.


  • IF no dependency tries to update too. Off course in that case I would stop. Without pacman -Sy, I never do that anyway, only -Syu.

    That’s all you need to know. As long as you always use pacman -Syu you will be fine. pacman -Sy is the real problem. The wiki page is pretty clear about the sequences of commands that are problematic https://wiki.archlinux.org/title/System_maintenance#Partial_upgrades_are_unsupported.

    Right? What i don’t understand is, when I uninstall with pacman -Rs firefox, delete the cached firefox package (only that file), then the system is in the same state as before I installed it. Then -S firefox should be okay, right? And it even looks up the new version.

    This isn’t correct. It won’t look up the new version. Assuming that the system was in a consistent state it will download the exact same package that you deleted. The system only ever “updates” when you run pacman -Sy. Until you use -y all packages are effectively pinned at a specific version. If the version that gets installed is different than the one you removed it probably means that you were breaking the partial update rule previously.


  • But that is my point. Just running pacman -S firefox is fine as long as you didn’t run pacman -Sy at some point earlier. It won’t update anything, even dependencies. It will just install the version that matches your current package list and system including the right version of any dependencies if they aren’t already installed.

    But that means if you already have Firefox installed it will do nothing.