Threads for habibalamin

    1. 5

      Nice! Was able to clean up lots of files that can live under ~/.config.

      However, the very first thing this prints is

      The $XDG_RUNTIME_DIR environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!
          ⤷ The recommended value is: /run/user/$UID
      

      Is this applicable to macOS? Some quick searching didn’t really give a definitive answer…

      1. 2

        “Applicable” is very debatable. The XDG Base Directory Specification is in theory applicable to any POSIX-like system. But it is most “at home” on Linux and other systems that follow a more traditional Unix filesystem layout than MacOS offers.

        If you mean, “can I use it on MacOS?” the answer is yes, with some caveats:

        1. If you install an application (say, from brew) that uses the XDG Base Directory Specification for its file locations, then you may not have a choice but to create/manage XDG directories on MacOS.
        2. Some XDG variables default to values that MacOS either doesn’t use or doesn’t have. For example, XDG_CONFIG_DIRS defaults to /etc/xdg which is not present on MacOS.

        MacOS has its own application file organization system, mostly under ~/Library. If you want to use XDG-compatible apps, the “philosophically correct” thing to do is set the XDG base directories to their respective locations under ~/Library via shell environment variables yourself, as Apple does not do this for you. (Although I don’t know how you’d set environment variables for a GUI app in MacOS.) This gist may provide some guidance, although I am not convinced about all of their choices.

        1. 1

          I version control my dotfiles, and I have a pet peeve of some cross-platform(!) *nixy terminal software that decides to use folders in ~/Library for macOS, in a misguided attempt to be more ‘native’ to the platform or something.

          macOS is a certified UNIX, and a comfortable UNIX environment at that, there’s no need for a *nixy terminal program that uses all of macOS’ *nixy affordances and almost entirely works on its UNIX compatibility to try to be more native on macOS by putting its configuration somewhere I have to symlink them.

          It’d be more native to just stick with the *nix conventions entirely instead of half-*nix–half-Aqua conventions. The UNIX side is just as much (modern) macOS as the Aqua side, even if it’s not the (especially) unique part about macOS. In fact, the Maccy parts are built on the UNIX foundation, the UNIXy stuff isn’t some separate compatibility layer on top of a Maccy foundation.


          As for configuring XDG directories to be under ~/Library as a user, I’ve considered it before, but I think it’s better to maintain a separation between *nixy configuration which tends to have edited by hand, version controlled, and have their own config DSLs or use some simple config language, and configuration of macOS Aqua apps, which are machine-generated and -edited plist (i.e. XML) files that aren’t version controlled.

          I just checked and I have an mpv.plist and io.mpv.plist in ~/Library/Preferences (I’m guessing one for mpv run from a terminal and the other for the mpv macOS application bundle). I was curious if the GUI mpv bundle had created an mpv directory in ~/Library/Application Support, like a lot of apps do for themselves, and it hadn’t, but if it had, and I’d set XDG_CONFIG_DIR="$HOME/Library/Application Support", the $XDG_CONFIG_DIR/mpv directory would have been an interesting conflict between the GUI bundle.

        2. 2

          Even on Linux I don’t bother setting most of these if I’m happy with the defaults. Why clutter my profile script with setting XDG_CONFIG_HOME="$HOME/.config" when the spec says tools should use that value anyway when that variable is unset? Though maybe I really should set them all, since “explicit is better than implicit” as Pythonistas like to say.

          1. 1

            This suggests a few possible ways to handle this though nothing I would call “definitive.”

            https://stackoverflow.com/q/14237142/26702

          2. 17

            Aliases are a bad solution. Abbreviations in Fish have taken over 90% of my shell aliases, including even many of the git aliases I had. It’s just superior in every way.

            It’s also better than the script in $PATH approach as they autocomplete and are more easily searchable in reverse history, plus you can template the command line and move the cursor where you want. Scripts or aliases can’t do that.

            What I don’t use abbreviations for I use the script solution (rarely) or simple shell functions.

            1. 3

              Aliases are a bad solution. Abbreviations in Fish have taken over 90% of my shell aliases

              What’s the difference, and what are the alternatives for those who don’t use fish?

              1. 6

                An abbreviation in fish expands after being typed, so you see the full command. There are some more advanced features such as templating, but I’m not experienced enough on that to speak too much about.

                1. 1

                  An abbreviation in fish expands after being typed, so you see the full command

                  That’s super cool! I have been using fish for a couple of years now and haven’t come across abbreviations yet – looks like it is time to give it a go!

                2. 1

                  As far as I know there are no alternatives in other shells. It’s something I’ve seen only in Fish.

                  The doc has some examples of its usefulness: https://fishshell.com/docs/current/cmds/abbr.html

                  1. 4

                    You can set ZSH to tab expand aliases, and you can expand them with a keybind in bash as well. https://superuser.com/questions/1514569/how-to-expand-aliases-inline-in-zsh

                    1. 1

                      I see. In comparison, I don’t really see why you’d say that “aliases are a bad solution”, then? Looks mostly like a matter of taste to me.

                  2. 3

                    Thank you. You made me realize that that I need to use abbreviations way more often. I already do, but I still have some shell script in PATH that could just be abbreviations.

                    What I especially like about abbreviations is that when I copy&paste the outputs e.g. to document something or share instructions, my personal abbreviations are already expanded, so they don’t confuse other people.

                    1. 2

                      Why does your shell not autocomplete $PATH binary names?

                      Never mind, I realised you meant it breaks the autocomplete of the binary’s arguments/flags/etc.

                    2. 31

                      A good “falsehoods” list needs to include specific examples of every falsehood.

                      1. 28

                        Yours doesn’t! And I maintain that it’s still a good boy list.

                        1. 2

                          That doesn’t look to me like it’s meant to be an example of a good falsehoods list.

                            1. 3

                              In addition, it’s worth knowing that dogs up to 2 years of age exhibit the halting problem.

                        2. 27

                          I’ll make an attempt, with the caveat that this list seems so obvious to me that I’m worried I might be missing some nuance (imagine a similar list about cooking utensils with “people think knives can only be used for butter, but in reality they can also be used to cut bread, meat, and even vegetables!!!”).

                          Sentences in all languages can be templated as easily as in English: {user} is in {location} etc.

                          Both the substitutions and the surrounding text can depend on each other. The obvious example is languages where nouns have gender, but you might also have cases like Japanese where “in” might be へ, で, or に to indicate relative precision of the location.

                          Words that are short in English are short in other languages too.

                          German is the classic example of using lengthy compound words where English would use a shorter single-purpose word, “Rindfleisch” vs “beef” or “Lebensmittel” vs “food” (why yes I haven’t had lunch yet, why do you ask…?).

                          For any text in any language, its translation into any other language is approximately as long as the original.

                          See above – English -> German tends to become longer, English -> Chinese tends to become shorter.

                          For every lower-case character, there is exactly one (language-independent) upper-case character, and vice versa.

                          Turkish and German are famous counter-examples, with Turkish 'i' / 'I' being different letters, or German ß capitalizing to "SS" (though I think this is now considered somewhat old-fashioned?).

                          The lower-case/upper-case distinction exists in all languages.

                          Not true in Chinese, Japanese, Korean.

                          All languages have words for exactly the same things as English.

                          Every language has words that don’t exist in any other language. Sometimes because the concept is alien (English has no native word for 寿司), sometimes because a general concept has been subdivided in a different way (English has many words for overcast misty weather that don’t translate easily into languages from drier climates).

                          Every expression in English, however vague and out-of-context, always has exactly one translation in every other language.

                          I’m not sure what this means because many expressions in English don’t even have a single explanation in English, but in any case, idioms and double entendres often can’t be translated directly.

                          All languages follow the subject-verb-object word order.

                          If one’s English to SVO order is limited, limited too must their knowledge of literature be.

                          When words are to be converted into Title Case, it is always the first character of the word that needs to be capitalized, in all languages.

                          Even English doesn’t follow a rule of capitalizing the first character of every word. Title Casing The First Letter Of Every Word Is Bad Style.

                          Every language has words for yes and no.

                          One well-known counter-example being languages where agreement is by repeating a verb:

                          A: “Do you want to eat lunch together?” B: “Eat.”

                          In each language, the words for yes and no never change, regardless of which question they are answering.

                          See above.

                          There is always only one correct way to spell anything.

                          Color / colour, aluminum / aluminium

                          Each language is written in exactly one alphabet.

                          Not sure exactly what this means – upper-case vs lower-case? Latin vs Cyrillic? 漢字 vs ひらがな カタカナ ? 简化字 vs 繁体字 ? Lots of counter-examples to choose from, Kazakh probably being a good one.

                          All languages (that use the Latin alphabet) have the same alphabetical sorting order.

                          Lithuanian sorts 'y' between 'i' and 'j': https://stackoverflow.com/questions/14458314/letter-y-comes-after-i-when-sorting-alphabetically

                          Some languages special-case ordering of letter combinations, such as ij in Dutch.

                          And then there’s the dozens of European languages that have their own letters outside the standard 26. Or diacritics.

                          All languages are written from left to right.

                          Arabic, Hebrew.

                          Even in languages written from right to left, the user interface still “flows” from left to right.

                          Not sure what “flows” means here, but applications with good RtL support usually flip the entire UI – for example a navigational menu that’s on the right in English would be on the left in Arabic.

                          Every language puts spaces between words.

                          Segmenting a sentence into words is as easy as splitting on whitespace (and maybe punctuation).

                          Chinese, Japanese.

                          Segmenting a text into sentences is as easy as splitting on end-of-sentence punctuation.

                          English: "Dear Mr. Smith".

                          No language puts spaces before question marks and exclamation marks at the end of a sentence.

                          No language puts spaces after opening quotes and before closing quotes.

                          French famously has rules that differ from English regarding spacing around punctuation.

                          All languages use the same characters for opening quotes and closing quotes.

                          “ ” in English,「 」in Japanese, « » in French,

                          Numbers, when written out in digits, are formatted and punctuated the same way in all languages.

                          European languages that use '.' for thousands separator and ',' for the fractional separator, or languages that group by different sizes (like lakh/crore in Indian languages).

                          No two languages are so similar that it would ever be difficult to tell them apart.

                          Many languages are considered distinct for political reasons, even if a purely linguistic analysis would consider them the same language.

                          Languages that have similar names are similar.

                          English (as spoken in Pittsburgh), English (as spoken in Melbourne), and English (as spoken in Glasgow).

                          More seriously, Japanese and Javanese.

                          Icons that are based on English puns and wordplay are easily understood by speakers of other languages.

                          Often they’re difficult to understand even for English speakers (I once saw a literal hamburger used to signify a collapsable sidebar).

                          Geolocation is an accurate way to predict the user’s language.

                          Nobody who has ever travelled would think this. And yet. AND YET!

                          C’mon Google, I know that my IP is an airport in Warsaw but I really don’t want the Maps UI to switch to Polish when I’m trying to find a route to my hotel.

                          Country flags are accurate and appropriate symbols for languages.

                          You can roughly gauge where you are in the world by whether the local ATMs offer “🇬🇧 English”, “🇺🇸 English”, or “🇦🇺 English”.

                          Every country has exactly one “national” language.

                          Belgium, Luxembourg, Switzerland.

                          Every language is the “national” language of exactly one country.

                          English, again.

                          1. 14

                            Turkish and German are famous counter-examples, with Turkish ‘i’ / ‘I’ being different letters, or German ß capitalizing to “SS” (though I think this is now considered somewhat old-fashioned?).

                            The German ß has history.

                            The old rule is that ß simply has no uppercase. Capitalizing it as “SS” was the default fallback rule if you had to absolutely capitalize everything and the ß would look bad (such as writing “STRAßE” => “STRASSE”). Using “SZ” was also allowed in some cases.

                            The new rule is to use the uppercase ß: ẞ. So instead of “STRASSE” you now write “STRAẞE”.

                            The usage of “SZ” was disallowed in 2006, the East Germans had an uppercase ß since 1957, the West German rules basically said “Uppercase ß is in development” and that was doppred in 1984 for the rule to use SS or SZ as uppercase variant. The new uppercase ß is in the rules since 2017. And since 2024 the uppercase ß is now preferred over SS.

                            The ISO DIN 5008 was updated in 2020,

                            This means depending on what document you’re processing, based on when it was created and WHERE it was created, it’s writing of the uppercase ß may be radically different.

                            It should also be noted that if you’re in Switzerland, ß is not used at all, here the SS substitute is used even in lower case.

                            Family names may also have custom capitalization rules, where ß can be replaced by SS, SZ, ẞ or even HS, so “Großman” can become “GROHSMANN”. Note that this depends on the person, while Brother Großmann may write “GROHSMANN”, Sister Großmann may write “GROSSMANN” and their mother may use “GROẞMANN” and these are all valid and equivalent.

                            Umlauts may also be uppercased without the diacritic umlaut and with an E suffix; ä becomes “AE”. In some cases even lowercase input does the translation because older systems can’t handle special characters, though this is not GDPR compliant.

                            No two languages are so similar that it would ever be difficult to tell them apart.

                            Many languages are considered distinct for political reasons, even if a purely linguistic analysis would consider them the same language.

                            If you ever want to have fun, the politics and regionality of German dialects could be enough to drive some linguists up the wall.

                            Bavarian is recognized as a language and dialect at the same time, it can be subdivided into dozens and dozens of subdialects, which are all similar but may struggle to understand eachother.

                            As someone who grew up in Swabian Bavaria, my dialect is a mix of both Swabian and Bavarian, I struggle to understand Northern Bavaria but I struggle much less with Basel Swiss Germany (which is distinct from Swiss German in that it originates from Lower Allemans instead of Higher Allemans) which is quite close in a lot of ways.

                            And the swiss then double down on making things confusing by sometimes using french language constructs in german words, or straight up importing french or italian words.

                            1. 2

                              East Germans had an uppercase ß since 1957

                              What should I read to learn more about this? Why wasn’t the character in Unicode 1.0, then?

                              1. 5

                                East Germany added the uppercase ß in 1957 and removed it in 1984. The spelling rules weren’t updated, so despite the presence of an uppercase ß, it would have been wrong to use it in any circumstances. Since Unicode 1.0 is somewhere around 1992, with some early drafts in 1988, it basically missed the uppercase ß being in the dictionary.

                                The uppercase ß itself has been around since 1905 and we’ve tried to get it into Unicode since roughly 2004.

                                1. 1

                                  Is this more like there being an attested occurrence in a particular dictionary in East Germany in 1957 rather than common usage in East Germany?

                              2. 7

                                Every expression in English, however vague and out-of-context, always has exactly one translation in every other language.

                                I’m not sure what this means because many expressions in English don’t even have a single explanation in English, but in any case, idioms and double entendres often can’t be translated directly.

                                A good example of this is a CMS I used to work on. The way it implemented translation was to define everything using English[0], then write translations as a mapping from those English snippets to the intended language. This is fundamentally flawed, e.g. by homonyms:

                                Subject            From       Flags              Actions
                                ----------------------------------------------------------------
                                Project update     Alice      Unread, Important  [Read] [Delete]
                                Welcome            HR         Read               [Read] [Delete]
                                

                                Here, the “Read” flag means “this has been read”, whilst the “Read” button means “I want to read this”. Using the English as a key forces the same translation on both.

                                [0] We used British English, except for the word “color”; since we felt it was better to match the CSS keywords (e.g. when defining themes, etc.).

                                1. 4

                                  One trick is to use a different word on the asset: Reviewed(adj) and Review(v) don’t have the same problem that Read(adj) and Read(v) do. Seen(adj) and See(v); Viewed(adj) and View(v). And so on. Then you can “translate” to English to actually use Unread/Read/[Read] if you still like it without confusing the translator who need to know you want more like e.g. Lido/Ler or 阅读/显示 and so on.

                                2. 3

                                  Much better than the original article. Also love how many of the counter examples come from English.

                                3. 16

                                  My bar for these lists is https://yourcalendricalfallacyis.com/ and most “falsehoods programmers believe” lists don’t meet it.

                                  1. 6

                                    The number of exceptions caused by the Hebrew calendar makes me shed a tear of joy.

                                    Here’s one falsehood they missed: the length of a year varies by at most one day. True in Gregorian calendar, apparently true in the Islamic calendar, but not true in the Hebrew calendar: leap years are 30 days longer than regular years.

                                    1. 2

                                      They sorta cover it on the “days” section, by way of mentioning that the Hebrew calendar has leap months.

                                      They also miss Byzantine calendars which are still used by many churches, related to the Jewish Greek calendar from the Septuagint. It’s of course complicated by the fact that many churches & groups do not agree on what year was the start, so it’s complex to use (but still in somewhat fairly common liturgical use).

                                      1. 1

                                        Wow 30? I need to red more about this

                                    2. 10

                                      Here’s a fun (counter)example of (something like) this one from my heritage language:

                                      In each language, the words for yes and no never change, regardless of which question they are answering.

                                      (Context: the word for enjoy/like is the same in the language, so when translating to English, I choose whichever sounds most natural in each given example sentence.)

                                      When someone says, “do you (enjoy/)like it?”, if you want to say “yes, I like it”, that’s fine, but if you want to say you don’t like it, you would say, “I don’t want it”; if you were to say, “I don’t like it” in that situation, it would mean, “I don’t want it”. The same reversal happens if they ask, “do you want it?”, and you want to respond in the negative.

                                      So someone would say, “do you want a chocolate bar?”, and you’d say, “no, I don’t want it”, and that would mean, “no, (I already know) I don’t (usually/habitually) enjoy it (when I have it), (therefore I don’t want it)”, whereas, “no, I don’t enjoy it” would just straightforwardly mean, “I don’t want it”.

                                      (You can also respond with just, “no!” instead of using a verb in the answer.)

                                      This only happens in the habitual present form. Someone might ask, “do you like chocolate?” before they offer you some, and you can say, “no, I don’t want it”, but if they already gave you a chocolate bar to try, they may ask, “did you like it?” in the past tense, and you’d have to respond with, “I didn’t like it” instead of, “I didn’t want it”. And, “do you want chocolate?” would be met with, “no, I don’t like it”, but “did you want chocolate?” would be met with, “no, I didn’t want it”, and that second one would just mean what it straightforwardly sounds like in English.

                                      (Strictly speaking, it doesn’t need to be a response to a question, I’m just putting it into a context to show that the verb used in the answer isn’t just a negative form of the same verb used in the question.)

                                      (It’s hard to explain because if you were to translate this literalistically to English, it wouldn’t even be noticed, since saying, “no, I don’t like it” in response to, “do you want it?” is quite natural, but does literally just mean, “I don’t like it”, in the sense of, “no, (I already know) I don’t (usually/habitually) enjoy it (when I have it), (therefore I don’t want it)”. Even, “no, I don’t want it“ in response to, “do you like it?” is fairly natural in English, if a little presumptive-sounding.)

                                      1. 4

                                        In Polish when someone asks you “Czy chcesz cukru do kawy?” (“Do you want coffee with sugar?”) and you can respond with “Dziękuję”, which can mean 2 opposite things “Yes, please” or “No, thank you”.

                                      2. 6

                                        The original ones, like “…Names”, don’t; part of what I find fun about them is trying to think of counterexamples.

                                        1. 6

                                          I think if you want them to be useful they need to include counterexamples. If it’s just a vent post then it’s fine to leave them.

                                          1. 4

                                            The first one gets a pass because it was the first one, and even then, I think it’s better to link people one of the many explainers people wrote about it.

                                        2. 23

                                          This was more insane than I even expected from the title, but this part tickled me:

                                          But through it all, I never gave up because I always thought I was right around the corner from succeeding. I just didn’t know any better.

                                          My definition of success was never to actually run the game. All I wanted was the specific reason Doom can’t run in a type system, but every time I hit a roadblock, I always came up with some ridiculous workaround.

                                          I clung to that belief that it couldn’t work, and that doubt fuelled me the whole time, […]

                                          1. 6

                                            I also switched to a mac for the first time in October, it’s mostly working out, but a couple of things drive me nuts currently:

                                            • Home does not mean Home like on Windows/Linux
                                            • going left or right word by word with alt instead of ctrl
                                            • activating an app with several windows brings all its windows to the foreground

                                            Also while my employer lets me do 99% of the things on this machine, Karabiner seems to need a driver I’m not allowed to install, so unfortunately I can’t remap capslock, but that’s not a huge problem.

                                            1. 7

                                              … so unfortunately I can’t remap capslock, …

                                              some amount of remapping f.e. caps-lock -> ctrl can be done via the customize modifier keys through the settings menu itself.

                                              1. 6

                                                This is the way. You have to do it for every new keyboard that gets plugged in, but I have all capslock keys assigned to escape. On Sequoia it’s:

                                                System Settings -> Keyboard -> Keyboard Shortcuts -> Modifier Keys

                                                You have to go through the drop-down menu on the top to change the setting for each keyboard individually.

                                              2. 4

                                                activating an app with several windows brings all its windows to the foreground

                                                This behavior was kept for consistency with classic Mac OS, which had this behavior due to some limitations in global data structures that were not designed to support a multitasking OS.

                                                1. 4

                                                  This app might help with that:

                                                  https://hypercritical.co/front-and-center/

                                                  You’ll find on the Mac that the main functionality, while opinionated, is often complemented by one or more for-pay, well-crafted independent tools for folks who need specific functionality.

                                                  1. 5

                                                    For long-time Mac people, a fun bit of trivia is that it’s written by John Siracusa.

                                                  2. 2

                                                    This is an amazing fact - where did you learn about this peculiarity?

                                                    1. 2

                                                      Not sure where I first read about it, but it goes back to Switcher/MultiFinder on classic MacOS in the mid 80’s.

                                                      1. 1

                                                        This is an amazing fact

                                                        Er, not really, not if you were already using Macs when OS X came in. It behaves the same way Classic did, and Classic did that for good reasons.

                                                        TBH I never really noticed it and don’t consider it to be an inconvenience, but now it’s been spelled out to me, I can see how it might confuse those used to other desktop GUIs.

                                                        FWIW, being used to OS X being just a Mac and working like a Mac, I found the article at the top here a non-starter for me. On the other hand, I absolutely detest KDE, and I would have liked something going the other way: how to make KDE usable if you are familiar with macOS or Windows.

                                                        1. 5

                                                          I should note that I was born after the year 2000 and bought my first Mac computer in 2021, so it’s perhaps mostly amazing because of my relatively small scope.

                                                          1. 6

                                                            Oh my word!

                                                            Fair enough, then…

                                                            (I can, just barely, remember the 1960s. Right now I am resisting the urge to crumble into dust and blow away on the breeze with all my might.)

                                                      2. 1

                                                        I’m not understanding how that is consistent. When you click a modern macOS window, that window alone comes to the front, unless you are using Front and Center as another mentioned. When you click a Dock icon, then all the app’s windows come forward, but classic Mac OS didn’t have a Dock. I am out of my depth, though, as an OS X-era switcher.

                                                        1. 3

                                                          In the very first versions of Mac OS, there was only one program running at a time (plus desk accessories), so only that application’s windows were visible.

                                                          Then came MultiFinder and Switcher and whatever. In the earliest versions, you could switch programs: all of one program’s windows would vanish, and the next’s would appear.

                                                          Eventually you had all your windows on screen at once two ways of switching: a menu of applications in the menu bar, and by clicking on a window. If you clicked on a window in classic Mac OS, all of its windows would be raised. Until Mac OS X (maybe OS 9?), it was not officially possible to interleave windows of different applications, and Mac OS to this day still raises all windows when you select an application in the Dock, just as it did when you selected an application in the switcher menu in the days of yore.

                                                          This behavior started because certain data structures in classic Mac OS were global, and the behavior stuck around for backwards compatibility reasons.

                                                      3. 4

                                                        activating an app with several windows brings all its windows to the foreground

                                                        Perspective may or may not help muscle memory, and you probably know this already: This is because applications and their menu bars are the top level UI objects in macOS, whereas windows are one level down the tree. ⌘-Tab or a dock icon click will switch apps. The menu bar appears, and so do windows if they exist, but there may be none. (Some apps then create one.) If what you want is to jump to a window, Mission Control is your friend.

                                                        1. 1

                                                          I know, but thanks.

                                                          I suppose it’s my (weird?) setup where I have a firefox window open on the (smaller) laptop screen to the right that’s always open but less used - but also one with “current tabs” on one of the two main screens.

                                                          The odd thing to me is that alt-tab gives me both firefox windows (and thus hides e.g. my IDE) and not the last recently used like on Windows (and most linux WMs, I guess - but I use tiling there most of the time). I guess I ruined everything else by using a tiling WM for years where every window opens exactly on that screen I want it to be and I never had to alt-tab in the first place :P

                                                        2. 2

                                                          Karabiner seems to need a driver I’m not allowed to install, so unfortunately I can’t remap capslock, but that’s not a huge problem.

                                                          I went over this and I dislike how cumbersome Karabiner feels. You can remap keys pretty easily with a custom Launchd user agent. Some resources:

                                                          Obviously you should try the hidutil command line by itself before creating the service.

                                                          As an example, here’s what I have in ~/Library/LaunchAgents/org.custom.kbremap.plist (working on Sequoia 15.3.1): https://x0.at/BNtu.txt

                                                          I hope this helps.

                                                          1. 1

                                                            I can try again, thanks - but I’m pretty sure I spent some hours researching and couldn’t get it to work as a non-modifier in a way I need it.

                                                            1. 2

                                                              I have a custom app I wrote to remap Command to Escape when pressed without being held, for the exact same reason that I couldn’t install Karabiner on a work laptop (those MacBook Pros with no physical escape key).

                                                              You could probably tweak it for your own purposes, hopefully without too much difficulty.

                                                        3. 11

                                                          This is where structural types shine. You don’t have to name everything if you don’t want to. In TypeScript "local" | "remote" is a type. In Roc, [Local, Remote] is a type.

                                                          1. 18

                                                            Having a name for it is a useful thing though. As soon as you need to talk about that type with a colleague, you’re left fumbling for something on the spot.

                                                            Naming in general is such a powerful action on its own because its a way of packaging up some complexity (the thing the name represents) in a way that enhances our ability to reason about it with ourselves and with others.

                                                            If the type is used in more than a couple places, having a name for it becomes valuable quickly.

                                                            1. 5

                                                              Yeah I agree most of the time naming things is important. It’s just nice being able to skip it say 10 or 20 percent of the time, where the name doesn’t really add much. Or to leave it out until you’ve written more code and are in a better position to choose a name.

                                                              1. 2

                                                                I agree it is a nice feature to have! Just not an answer to “this thing is hard to name so I’m not going to name it” when it’s an important enough piece of the overall system that not having a name would be detrimental.

                                                              2. 3

                                                                There’s nothing wrong with adding a name like type Location = ‘local' | ‘remote’ in Typescript, or similar in Roc, though.

                                                                I think it makes sense for eg library authors to have a taxonomy of what the various values and types are. But if eg library consumers can just monkey-see monkey-do and type ‘local’ without needing to learn and memorize that type name, that makes it easier to use.

                                                              3. 7

                                                                This is just postponing the problem by a single line of code. If you have a variable or function argument with that type, what do you call that? Structural types won’t save you from naming the thing being passed around.

                                                                1. 6

                                                                  Just pass that value around pointfree everywhere 😉.

                                                                2. 3

                                                                  This really only works if you use strings (or something string-like) though. If you’re using something more like Rust or C enums, you need a name to namespace the fields under, because you just can’t define a global name called remote in this situation.

                                                                  1. 8

                                                                    If you’re using something more like Rust or C enums, you need a name to namespace the fields under, because you just can’t define a global name called remote in this situation.

                                                                    Sure you can! See Roc tag unions or OCaml polymorphic variants.

                                                                3. 13

                                                                  What is the tl;dr on this issue? It sounds like the litigators want to load their own software on Apple hardware and use legislation to force that?

                                                                  Sounds bogus to me. There’s a gazillion hardware platforms. Pick an android device. Pick any of a thousand laptop brands.

                                                                  It does sound like the EU is going after Apple for populist + cash machine reasons.

                                                                  1. 44

                                                                    Sounds bogus to me. There’s a gazillion hardware platforms. Pick an android device. Pick any of a thousand laptop brands.

                                                                    There’s no good reason to allow any locked platform that doesn’t allow users to re-purpose them by running their own software. Doesn’t matter if there are other options. I’m not sure if it’s hubris or greed from Apple, but it doesn’t serve the public, and that practice deserves to get shut down.

                                                                    1. 32

                                                                      It also sets a dangerous precedent, which other companies may follow. Given enough of such locked down vendors, overall software freedom would erode enough to become a real problem. So even if now there’s the excuse that there are plenty of “more open” alternatives, it’s still fundamentally unacceptable IMO.

                                                                      Besides, it’s not like there’s a huge amount of choice on mobile…

                                                                      1. 15

                                                                        I disagree with the notion of “There’s no good reason to allow…” That’s not the way the law should work in a free society. Things should be allowed unless there are good reasons to forbid them. I’m not a libertarian; but modern democratic thought, from the Declaration of Independence through the UN Charter on Human Rights, starts with people’s rights.

                                                                        If I want to sell you a machine with a black box inside it that’s welded shut, that’s my right. You are welcome to try to hacksaw your black box, of course, or to buy a competing device that’s not locked.

                                                                        1. 38

                                                                          You are welcome to try to hacksaw your black box, of course

                                                                          In most of the world, that’s not true. In fact most of the world forbids you from even trying to look inside the black box other than for specific purposes. The law is already heavily imbalanced in favor of the black box manufacturers.

                                                                          See 17 USC §1201, or 2001/29/EC Art. 6 for those I’m aware of.

                                                                          1. 15

                                                                            The reality is capitalism doesn’t work this way. Modern history suggests that pretty much the first thing capital does when operating in truly unfettered markets is to try to form monopolies, or at the very least cartels. The US discovered this the hard way which is how they ended up passing the quintessential modern “anti-trust” legislation - which of course the neoliberals have spent the last 40-odd years trying to dilute.

                                                                            1. 4

                                                                              I don’t believe in “truly unfettered markets”, and they don’t exist anywhere; that’s a straw man. Nor is there a monopoly/cartel here: Apple has strong competitors in Google, Samsung, Microsoft, etc., none of whom have control over the phone or OS market. Apple doesn’t even have 50% market share. Things are a lot better than in the mid-90s when Microsoft was in a monopolistic position.

                                                                            2. 13

                                                                              If I want to sell you a machine with a black box inside it that’s welded shut, that’s my right. You are welcome to try to hacksaw your black box, of course, or to buy a competing device that’s not locked.

                                                                              I agree, and so does the DMA. That’s why it only kicks in for companies that have achieved a certain level of market dominance that allows them sell things that are not what the customers want, but which the customers must buy because of other features. The Android / iOS duopoly is so entrenched that Microsoft was not able to successfully enter the market with a competing product. If you look at the main iOS or Android stores, there are so many apps that there’s a huge lock-in effect. Even switching from iOS to Android or vice versa is often hard because there’s often at least one app that doesn’t have a direct equivalent (and a lot more that require you to buy them again for the other platform).

                                                                              1. 9

                                                                                Things should be allowed unless there are good reasons to forbid them.

                                                                                Tautology detected.

                                                                                I disagree with the notion of “There’s no good reason to allow…” That’s not the way the law should work in a free society. Things should be allowed unless there are good reasons to forbid them. I’m not a libertarian; but modern democratic thought, from the Declaration of Independence through the UN Charter on Human Rights, starts with people’s rights.

                                                                                You have to be very selective in your reading to think that the concept of “people’s rights” applies to huge economic structures with the power to shape society.

                                                                                1. 3

                                                                                  Things should be allowed unless there are good reasons to forbid them.

                                                                                  Tautology detected.

                                                                                  How’s that a tautology?

                                                                                  All it means is that things should be allowed by default (i.e. not denied by default).

                                                                                  Can you point out where the repetition is (in the original phrasing)?

                                                                                  1. 1

                                                                                    Can you point out where the repetition is (in the original phrasing)?

                                                                                    You are begging the question that there is repetition in the original phrasing; nobody said there was.

                                                                                      1. 1

                                                                                        A statement that is true by the definition of its terms and thus adds nothing to the discussion.

                                                                                        1. 2

                                                                                          Right, which is essentially a form of repetition. Not necessarily word for word, but that wasn’t what I meant.

                                                                                          Tautologies add nothing to the discussion because they restate what was already part of the discussion, implied or explicit.

                                                                                          It’s like saying “all triangles have 3 sides”; well, yeah, “triangle” already means “3-sided”, so the sentence is equivalent to saying, “all 3-sided [objects] have 3 sides”.

                                                                                          I’m really not seeing how that’s the case in the original comment under discussion:

                                                                                          Things should be allowed unless there are good reasons to forbid them.

                                                                                          If you wanted to tweak it to be tautological, it’d be something like:

                                                                                          Things should be allowed unless they shouldn’t be allowed.

                                                                                          “There are good reasons to forbid them” is not equivalent to “they should be forbidden”, because when looking at whether we “should” do something, we don’t only look at whether there are good reasons to do so, we also consider if there are any good reasons not to do so and make a decision by weighing up the pros and cons.

                                                                                          When you consider his point charitably, it’s clear he’s saying, “if there are no good reasons to forbid something and there are no good reasons to allow it, we should default to allowing it”.

                                                                                          Ironically, his statement may have been more obviously not tautological if he’d restated it by contrasting it with its opposite, like so: “things should be allowed unless there are good reasons to forbid them [rather than being forbidden unless there are good reasons to allow them]” — thus making it obvious that his point was, as I said, “things should be allowed by default”.

                                                                                          1. 1

                                                                                            Right, which is essentially a form of repetition. Not necessarily word for word, but that wasn’t what I meant.

                                                                                            so repetition, but not necessarily “in the original phrasing.”

                                                                                            When you consider his point charitably, it’s clear he’s saying, “if there are no good reasons to forbid something and there are no good reasons to allow it, we should default to allowing it”.

                                                                                            but then the statement itself is a good reason to allow the thing, so the antecedent can never be true and the statement is vacuous.

                                                                                            1. 1

                                                                                              but then the statement itself is a good reason to allow the thing, so the antecedent can never be true and the statement is vacuous.

                                                                                              At this point, I think you’re being way too literal, which is not how human language works.

                                                                                              Yes, if you want to rephrase his point as, “there being no good reasons to forbid something is itself a good reason to allow it”, which is again, just another way of saying, “things should be allowed by default”, then feel free to do that.

                                                                                              You clearly understand his point.


                                                                                              But let me play the literal game with you for a bit. The statement, “things should be allowed unless there are good reasons to forbid them” can be interpreted, even literally as, “things [in general] should be allowed unless there are good reasons to ban them [in particular]”.

                                                                                              In other words, equivocate on “things” (which we refer to as “them” in the second usage).

                                                                                              Sure, for any given class of things you try to evaluate this rule on, it’ll reduce to, “X’s should be allowed unless there are good reasons to ban X’s”, but as my dictionary claims in its sample sentence for “tautology” anyway, “all logical propositions are reducible to either tautologies or contradictions”.

                                                                                              Sounds good to me!

                                                                                              1. 1

                                                                                                You clearly understand his point.

                                                                                                I understand it to be a truism. I don’t know what “by default” could mean in this context.

                                                                                                But let me play the literal game with you for a bit.

                                                                                                happy to play along but I didn’t follow this part.

                                                                                                1. 1

                                                                                                  I explain with some code analogies below, but I want to correct my previous statement that his rule is equivalent to:

                                                                                                  if there are no good reasons to forbid something and there are no good reasons to allow it, we should default to allowing it

                                                                                                  In reality, it’s more like:

                                                                                                  if there are no good reasons to forbid something, even without any good reasons to allow it, we should default to allowing it

                                                                                                  I also noticed you didn’t explicitly address this part of my previous comment:

                                                                                                  I’m really not seeing how that’s the case in the original comment under discussion:

                                                                                                  Things should be allowed unless there are good reasons to forbid them.

                                                                                                  If you wanted to tweak it to be tautological, it’d be something like:

                                                                                                  Things should be allowed unless they shouldn’t be allowed.

                                                                                                  “There are good reasons to forbid them” is not equivalent to “they should be forbidden”, because when looking at whether we “should” do something, we don’t only look at whether there are good reasons to do so, we also consider if there are any good reasons not to do so and make a decision by weighing up the pros and cons.

                                                                                                  Can you explain how “there are good reasons to forbid them” is equivalent to “they should be forbidden”, given that we also have to consider whether the reasons to allow them outweigh the reasons to forbid them before we can say they should be forbidden?


                                                                                                  I understand it to be a truism. I don’t know what “by default” could mean in this context.

                                                                                                  Let me try to explain it another way then. Imagine you’re writing a command for a CLI. Something like:

                                                                                                  x abc --def .
                                                                                                  

                                                                                                  You have a configurable behaviour that’s set by a config file in /etc, or a config file in ~ if that’s not there, or an environment variable $GHI if that’s not there, or a command line argument --ghi <value> if that’s not there.

                                                                                                  You can describe this as “if there’s no configured value in a good location, then default to X”. What you’re doing is the equivalent of saying, “but there is a configured value, the developers have configured the default” (defaulting to X — instead of erroring from a missing value, for example — is itself a configuration).

                                                                                                  I mean, sure, you can say that, but it’s only a tautology if you force it to be one, since there’s a perfectly reasonable way of interpreting it a non-tautological way, which is by interpreting “a configured value” to simply not include the configuration given by the developers, even though literally speaking, it’s also configuration.

                                                                                                  You could probably analogise other base cases in a recursive function. The statement “things should be allowed unless there are good reasons to forbid them” can be codified as the following recursive algorithm,

                                                                                                  which is also an algorithmification of what I was getting at with my restatement of, “if there are no good reasons to forbid something, even without any good reasons to allow it, we should default to allowing it”:

                                                                                                  allow
                                                                                                    :: [ReasonToAllow Subject]
                                                                                                    -> [ReasonToForbid Subject]
                                                                                                    -> Subject
                                                                                                    -> Bool
                                                                                                  allow _ [] x = True -- X should be allowed…
                                                                                                  allow reasonsToAllow (reasonToForbid : reasonsToForbid) x =
                                                                                                    -- …unless there are good reasons to forbid X
                                                                                                    if reasonToForbid `isAGoodReasonToForbid` x
                                                                                                    then
                                                                                                      if none isAGoodReasonToAllow reasonsToAllow
                                                                                                      then False -- forbid
                                                                                                      else weighUp reasonsToAllow (reasonToForbid : reasonsToForbid) x
                                                                                                    else allow reasonsToAllow reasonsToForbid x -- recurse
                                                                                                  

                                                                                                  You can say that mere lack of good reasons to forbid it is itself good reason to allow it, but when I say, “[even without any] good reasons to allow it”, I don’t mean whatever good reasons the developer has for defaulting to allowing, I mean whatever reasons are being provided as input to the function that are reified as ReasonToAllow; essentially we don’t count the reasons we default to allowing as “reasons [proper] to allow X”.

                                                                                                  Another way to phrase it in the allow function analogy is, “don’t require that the user provide good reasons to allow a thing if there are none to forbid it”.

                                                                                                  I mean, just go back to the context of the original comment:

                                                                                                  A commenter says, “There’s no good reason to allow any locked platform that doesn’t allow users to re-purpose them by running their own software”, and the comment under discussion responds, “I disagree with the notion of “There’s no good reason to allow…” That’s not the way the law should work in a free society. Things should be allowed unless there are good reasons to forbid them.”

                                                                                                  He’s simply expressing a philosophical point that rather than things being legal because the law allows them, things are illegal because the law forbids them, and that’s how it should be (in a free society).

                                                                                                  Anything that a legal system doesn’t explicitly forbid (with laws) or allow is implicitly allowed by a catch-all law that allows things by default (whether it’s written anywhere or not).

                                                                                                  I honestly don’t get what’s so difficult to understand about that or how it’s tautological.

                                                                                                  1. 1

                                                                                                    Can you explain how “there are good reasons to forbid them” is equivalent to “they should be forbidden”, given that we also have to consider whether the reasons to allow them outweigh the reasons to forbid them before we can say they should be forbidden?

                                                                                                    I don’t think they are necessarily equivalent, but I think the “unless” is confusing things.

                                                                                                    here is a rough derivation:

                                                                                                    things should be allowed unless there are good reasons to forbid them
                                                                                                    X should be allowed unless there are good reasons to forbid X
                                                                                                    if not (there are good reasons to forbid X) then (X should be allowed)
                                                                                                    if there are no good reasons to forbid X, then X should not be forbidden
                                                                                                    if there are no good reasons to forbid something, then it should not be forbidden.

                                                                                                    wouldn’t you agree that the last statement is a truism or a tautology? if you take issue with any of the steps, refer to your statement that “you’re being way too literal, which is not how human language works.”

                                                                                                    Let me try to explain it another way then.

                                                                                                    I almost included “the world is not a .vimrc file” at the end of my last comment because obviously I know what a default is in that context. I’m sorry that you wrote all that but analogizing to a software system doesn’t help me understand what being or allowed or forbidden “by default” would mean in the context of a company trying to do something in the real world. has the default case ever been reached? has it ever not been reached?

                                                                                                    He’s simply expressing a philosophical point that rather than things being legal because the law allows them, things are illegal because the law forbids them, and that’s how it should be (in a free society).

                                                                                                    Anything that a legal system doesn’t explicitly forbid (with laws) or allow is implicitly allowed by a catch-all law that allows things by default (whether it’s written anywhere or not).

                                                                                                    I don’t think either comment was specifically referring to the law, but this is true even in totalitarian societies. no legal system attempts to enumerate everything that is allowed.

                                                                                                    1. 1

                                                                                                      here is a rough derivation:

                                                                                                      things should be allowed unless there are good reasons to forbid them X should be allowed unless there are good reasons to forbid X if not (there are good reasons to forbid X) then (X should be allowed) if there are no good reasons to forbid X, then X should not be forbidden if there are no good reasons to forbid something, then it should not be forbidden.

                                                                                                      My original comment with the code sample was even longer at first, and I actually ripped this segment out:

                                                                                                      Initially, I thought you were interpreting his statement that,

                                                                                                      Things should be allowed unless there are good reasons to forbid them.

                                                                                                      as equivalent to,

                                                                                                      Things should be allowed unless they shouldn’t be allowed.

                                                                                                      but are you interpreting it as,

                                                                                                      Things shouldn’t be forbidden unless there are good reasons to forbid them.

                                                                                                      So it looks like I’m on the right track.

                                                                                                      wouldn’t you agree that the last statement is a truism or a tautology?

                                                                                                      A truism, yes, a tautology, no.

                                                                                                      […] but this is true even in totalitarian societies. no legal system attempts to enumerate everything that is allowed.

                                                                                                      Sure, sure, but the original commenter was making a point that it definitely shouldn’t be this way in a free society. I don’t disagree that even totalitarian systems don’t attempt to enumerate what’s allowed instead of enumerating what’s disallowed.

                                                                                                      analogizing to a software system doesn’t help me understand what being or allowed or forbidden “by default” would mean in the context of a company trying to do something in the real world. has the default case ever been reached? has it ever not been reached?

                                                                                                      […]

                                                                                                      I don’t think either comment was specifically referring to the law,

                                                                                                      No, the context is not merely a company trying to do something in the real world. It’s a discussion on whether the EU should force Apple to open up its iOS app store.

                                                                                                      Yes, in law, the default case gets reached all the time, and non-default cases get reached all the time. (If you’re gonna read that overly literal, too, I should clarify that by, “all the time”, I don’t mean that all cases reach both the default and non-default handlers, I mean that at any given point in time, there’s people doing things that the law implicitly allows (the default) and also people doing things that the law does not allow (non-default).)

                                                                                                      Within that context (of the discussion on whether the EU should force Apple to open up its iOS app store), a commenter says:

                                                                                                      There’s no good reason to allow any locked platform that doesn’t allow users to re-purpose them by running their own software.

                                                                                                      The implication one can pick up from that, whether they intended it to be read that way or not, is a “therefore, the EU should forbid Apple from selling its locked down platform [within its jurisdiction]”.

                                                                                                      Our original commenter is responding to that and saying:

                                                                                                      I disagree with the notion of “There’s no good reason to allow…” That’s not the way the law should work in a free society. Things should be allowed unless there are good reasons to forbid them.

                                                                                                      In other words: no, you can’t just imply “it should be prohibited because there’s no good reason to allow it”. The first commenter is implying a rule of, “things should be forbidden unless there are good reasons to allow them”, and our original commenter is responding, no, “things should be allowed unless there good reasons to forbid them”, which is an oppositional axiom.

                                                                                                      You can say the latter is a truism (in the sense that it’s axiomatic, not tautological), but it still has to be said when the first commenter’s statement is adopting the opposite axiom as a premise. Sometimes, things that seem obvious have to be restated.

                                                                                                      The point is just that it’s not on anyone to provide a good reason why Apple should be allowed to sell their locked down platform.

                                                                                                      The first burden is on those wanting to prohibit it to provide a justification for why it should be prohibited, and if they can’t give any, then it should just be permitted by default for whatever good reasons we default to permitting things, regardless of whether anyone can provide the EU a good reason to specifically permit this thing (that are separate from those good reasons we’ve adopted permitting as the default).

                                                                                                      Sure, I understand that there are many reasons people will give that will be the background of the discussion, but the statement, “there’s no good reason to allow […], therefore we should forbid it” should never even enter as part of the discussion.

                                                                                                      If you do bring that in, know that you’re challenging the axiom that things should be permitted by default, in which case you can’t just dump it in a conversation as if it’s already known/accepted/assumed that prohibition is the default.

                                                                                                      You have to be very selective in your reading to think that the concept of “people’s rights” applies to huge economic structures with the power to shape society.

                                                                                                      So you definitely understood that the context of the discussion was about law, so I’m still struggling to understand how you didn’t understand the simple point that the commenter was making without turning it into a tautology.

                                                                                                      1. 2

                                                                                                        A truism, yes, a tautology, no.

                                                                                                        so you agree that the last statement is a truism, but you apparently don’t agree that the first statement is a truism because the rest of your comment is trying to derive some non-obvious meaning from it. at which step in the derivation would you say it starts being a truism?

                                                                                                        for what it’s worth, the current paywalled version of the OED includes this in its definitions of “tautology”: “An argument, explanation, or definition that merely restates in different words the very thing which is to be explained, shown, or defined.”

                                                                                                        by the nature of how human language works, and the pointlessness of being “too literal,” I don’t know if it’s useful to keep arguing over the difference between truism and tautology and whether the statement is a good enough match for the definition. I think you understand what I meant.

                                                                                                        No, the context is not merely a company trying to do something in the real world. It’s a discussion on whether the EU should force Apple to open up its iOS app store.

                                                                                                        I assume you are saying “no” because you disagree that the comments in question extend beyond matters of law. well consider the phrase “that practice deserves to get shut down.” I think extralegal means such as protest, public denunciation, etc. are well within the scope of that idea, at least in the context of the comment.

                                                                                                        Yes, in law, the default case gets reached all the time, and non-default cases get reached all the time. (If you’re gonna read that overly literal, too, I should clarify that by, “all the time”, I don’t mean that all cases reach both the default and non-default handlers, I mean that at any given point in time, there’s people doing things that the law implicitly allows (the default) and also people doing things that the law does not allow (non-default).)

                                                                                                        so is there ever a case where someone is forbidden from doing something by default?

                                                                                                        Within that context (of the discussion on whether the EU should force Apple to open up its iOS app store), a commenter says:

                                                                                                        There’s no good reason to allow any locked platform that doesn’t allow users to re-purpose them by running their own software.

                                                                                                        The implication one can pick up from that, whether they intended it to be read that way or not, is a “therefore, the EU should forbid Apple from selling its locked down platform [within its jurisdiction]”.

                                                                                                        more or less. a more precise reading would be that the EU should allow plaintiffs to sue in such cases! [INFO HAZARD]

                                                                                                        Our original commenter is responding to that and saying:

                                                                                                        I disagree with the notion of “There’s no good reason to allow…” That’s not the way the law should work in a free society. Things should be allowed unless there are good reasons to forbid them.

                                                                                                        In other words: no, you can’t just imply “it should be prohibited because there’s no good reason to allow it”. The first commenter is implying a rule of, “things should be forbidden unless there are good reasons to allow them”, and our original commenter is responding, no, “things should be allowed unless there good reasons to forbid them”, which is an oppositional axiom.

                                                                                                        and I think both of those axioms are truisms and tautologies in the everyday sense of the words.

                                                                                                        You can say the latter is a truism (in the sense that it’s axiomatic, not tautological), but it still has to be said when the first commenter’s statement is adopting the opposite axiom as a premise. Sometimes, things that seem obvious have to be restated.

                                                                                                        sometimes indeed.

                                                                                                        The point is just that it’s not on anyone to provide a good reason why Apple should be allowed to sell their locked down platform.

                                                                                                        The first burden is on those wanting to prohibit it to provide a justification for why it should be prohibited, and if they can’t give any, then it should just be permitted by default for whatever good reasons we default to permitting things, regardless of whether anyone can provide the EU a good reason to specifically permit this thing (that are separate from those good reasons we’ve adopted permitting as the default).

                                                                                                        how about this: “there’s no good reason to allow killing someone just because they trespassed on your property.”

                                                                                                        then someone responds: “things should be allowed unless there are good reasons to forbid them.”

                                                                                                        do you think the first speaker should be expected to preemptively state their reasons for why killing should be prohibited? are they implying that things should be forbidden unless there are good reasons to allow them?

                                                                                                        Sure, I understand that there are many reasons people will give that will be the background of the discussion, but the statement, “there’s no good reason to allow […], therefore we should forbid it” should never even enter as part of the discussion.

                                                                                                        so does that apply to the above?

                                                                                                        If you do bring that in, know that you’re challenging the axiom that things should be permitted by default, in which case you can’t just dump it in a conversation as if it’s already known/accepted/assumed that prohibition is the default.

                                                                                                        so the first speaker in my example is “challenging the axiom that things should be permitted by default”????????

                                                                                                        You have to be very selective in your reading to think that the concept of “people’s rights” applies to huge economic structures with the power to shape society.

                                                                                                        So you definitely understood that the context of the discussion was about law, so I’m still struggling to understand how you didn’t understand the simple point that the commenter was making without turning it into a tautology.

                                                                                                        the literature on people’s rights extends beyond matters of law.

                                                                                                        1. 1

                                                                                                          A truism, yes, a tautology, no.

                                                                                                          so you agree that the last statement is a truism, but you apparently don’t agree that the first statement is a truism

                                                                                                          No, I agree that the first statement in the derivation list is also a truism, I don’t agree that it’s a tautology.

                                                                                                          I still don’t see the repetition in, “if there are no good reasons to forbid something, then it should not be forbidden”, unless you want to say “should X” is actually identical to, rather than what naturally follows from, “good reason to X”.

                                                                                                          But even then, that would make the statement “should not X” identical to “good reason to not X”, rather than identical to “no good reason to X”

                                                                                                          So again, I don’t think it was a tautology, I think it was an axiomatic truth that was being implicitly challenged and needed to be made explicit so that the discussion could continue with everyone understanding where they each stand.

                                                                                                          Even if the implicit challenge was a misreading, the first commenter could just respond, “I think you misunderstood me, I’m not challenging that axiom”.

                                                                                                          because the rest of your comment is trying to derive some non-obvious meaning from it.

                                                                                                          I think it’s pretty obvious that the meaning of “things should be allowed unless there are good reasons to forbid them” is “we should permit things by default”.

                                                                                                          Just like it’s obvious that when a friend says, “whatever happens happens”, he means, based on the context, “let’s not worry too much about things we can’t control or prepare for”, or “we don’t really have much to lose, let’s just go for it and if we lose our investment, it’s no big deal”, or whatever.

                                                                                                          for what it’s worth, the current paywalled version of the OED includes this in its definitions of “tautology”: “An argument, explanation, or definition that merely restates in different words the very thing which is to be explained, shown, or defined.”

                                                                                                          No problem with that definition, it’s pretty much what we already agreed on earlier in the discussion. I even gave the example of the three-sided triangle.

                                                                                                          by the nature of how human language works, and the pointlessness of being “too literal,” I don’t know if it’s useful to keep arguing over the difference between truism and tautology and whether the statement is a good enough match for the definition. I think you understand what I meant.

                                                                                                          I’m happy to skip debating the definition of those two words, you just tell me what you meant by it, because I’m not sure I do understand, still.

                                                                                                          If you were using tautology to mean “truism”, then sure, the statement was a tautology, but if you were using it with a definition like this in mind, then no, it wasn’t a tautology (and if you think this definition applies to “truism” as well, then no, it’s not a truism either).

                                                                                                          Just let me know which one you meant by it, I’m not interested in debating the definitions of words except to understand a third-party’s usage; between us, I’m happy to use the term tautology to mean axiom if you like.

                                                                                                          I assume you are saying “no” because you disagree that the comments in question extend beyond matters of law. well consider the phrase “that practice deserves to get shut down.” I think extralegal means such as protest, public denunciation, etc. are well within the scope of that idea, at least in the context of the comment.

                                                                                                          The comment’s immediate context was law, so that’s the safest meaning we can safely glean from it. The parent said:

                                                                                                          It sounds like the litigators want to load their own software on Apple hardware and use legislation to force that?

                                                                                                          Sounds bogus to me.

                                                                                                          The comment quoted the “sounds bogus to me” and his comment was a response to that. In other words, he’s clearly intending his rule of “no good reason to allow it, [so don’t allow it]” to apply in the legal sense and agreeing with the litigators.

                                                                                                          He may also intend his opinion to apply extra-legally, or even illegally, but we can’t assume that.

                                                                                                          That said, it wouldn’t make much sense that he’s advocating for prohibiting Apple from that action using the full force of the law, but not by boycotting Apple, for example. So I’m happy to extend it to extra-legal means, but he certainly meant it in the legal sense.

                                                                                                          I would also say that the rule of allowing others to do as they wish unless there are good reasons to forbid it also applies extra-legally, so the objection still works.

                                                                                                          so is there ever a case where someone is forbidden from doing something by default?

                                                                                                          In law? Nothing pops to mind.

                                                                                                          how about this: “there’s no good reason to allow killing someone just because they trespassed on your property.”

                                                                                                          then someone responds: “things should be allowed unless there are good reasons to forbid them.”

                                                                                                          do you think the first speaker should be expected to preemptively state their reasons for why killing should be prohibited? are they implying that things should be forbidden unless there are good reasons to allow them?

                                                                                                          A charitable interpretation of the first statement there would be, “someone trespassing on your property isn’t a good reason to kill them”.

                                                                                                          The good reasons we don’t kill trespassers are the same good reasons we don’t kill people in general.

                                                                                                          The disagreement that person would be having is whether there are or aren’t good reasons to kill trespassers in particular (or, put another way, whether trespassing is a good reason, and the reasons it’s a good reason, etc. however far you wanna go).

                                                                                                          They’d almost certainly both agree that there are good reasons not to kill in general. So he’s presumably saying, “someone trespassing isn’t a good reason to kill them” to someone who he knows or suspects disagrees, to make explicit where he stands.

                                                                                                          If someone said, “there’s no good reason to allow killing someone” full stop, in the context of responding to someone saying “it’s bogus” that someone is being charged for killing — with the obvious context that he’s saying killing people should just be allowed, not that the charged is innocent — I’d say they were doing a severely poor job of arguing that we shouldn’t kill people.

                                                                                                          The reason we don’t allow killing people is not because we lack good reason to allow it.

                                                                                                          Sure, I understand that there are many reasons people will give that will be the background of the discussion, but the statement, “there’s no good reason to allow […], therefore we should forbid it” should never even enter as part of the discussion.

                                                                                                          so does that apply to the above?

                                                                                                          Yes.

                                                                                                          so the first speaker in my example is “challenging the axiom that things should be permitted by default”????????

                                                                                                          See above.

                                                                                                          So you definitely understood that the context of the discussion was about law, so I’m still struggling to understand how you didn’t understand the simple point that the commenter was making without turning it into a tautology.

                                                                                                          the literature on people’s rights extends beyond matters of law.

                                                                                                          Yes, but this conversation was about legal proceedings.

                                                                                                          I’m happy to extend it beyond law, because in this instance, I think if he has this stance for law, by greater reason, he’d have it for extra-legal ways of prohibiting something which are generally less severe prohibition.

                                                                                                          I only mean to point out that he has this stance even as far as the law; I wanted to make it explicit that his stance includes legal means, not to imply that it excludes extra-legal means.

                                                                                                          1. 1

                                                                                                            I think it’s fair for me to ask that you clearly and directly answer the question I asked in bold. without that I don’t feel motivated to invest time in crafting a response to all that text. okay?

                                                                                                            1. 1

                                                                                                              It depends on the context.

                                                                                                              If the context is that they’re responding to someone who simply doesn’t agree that killing in the general case should be prohibited, and they’re aware of this (or aware that it’s a reasonable possibility), then I’d say yes, they are implying that things should be forbidden unless there are good reasons to allow them.

                                                                                                              My “no” answer is assuming a normal scenario, where the disagreement they’re having is specifically about whether trespassing is a good reason, and the context makes that obvious, because I don’t know anyone who agrees that killing in the general case should be allowed.

                                                                                                              Literally speaking, that’s what they’re implying either way, but with some charity in the right context, I can see that it’s unintentional, and what they really mean is, “someone trespassing on your property isn’t a good reason to overturn the established, agreed upon rule against killing them, which we have all sorts of reasons to prohibit”.

                                                                                                              Maybe the conversation in a normal scenario goes something like this:

                                                                                                              • There’s a news story of a trespasser killed submitted to a link-sharing site.
                                                                                                              • Commenters argue about whether the shooter should have been charged.
                                                                                                              • It turns into an argument about whether the law should allow shooting trespassers.
                                                                                                              • Our commenter says, “there’s no good reason to allow killing someone just because they trespassed on your property”.

                                                                                                              Their intention becomes clear because they themselves are bringing up a reason that others might appeal to as an alleged good reason to kill someone, and the action being considered for prohibition is already almost-universally agreed upon to be something that should be prohibited in the general case.

                                                                                                              Neither of those considerations apply to this thread.

                                                                                    1. 1

                                                                                      Max reply depth reached.

                                                                                      we made it! continuing from here…

                                                                                      Literally speaking, that’s what they’re implying either way, but with some charity in the right context, I can see that it’s unintentional, and what they really mean is, “someone trespassing on your property isn’t a good reason to overturn the established, agreed upon rule against killing them, which we have all sorts of reasons to prohibit”.

                                                                                      and yet you don’t think a reasonable, charitable interpretation of “there’s no good reason to allow any locked platform that doesn’t allow users to re-purpose them by running their own software” could be “we have all sorts of reasons to prohibit such closed platforms and there’s no reason to allow it that outweighs the reasons to prohibit it”?

                                                                                      instead you think the only reasonable interpretation is one that implies “things should be forbidden by default,” something that has never happened and that you couldn’t even speculate on what being forbidden by default would look like???

                                                                                      1. 1

                                                                                        I could extend that charity now, especially if the original author clarified that’s what they meant.

                                                                                        But secondly — yes, secondly, I’ll get to the firstly secondly, in a second — even with that interpretation, it was still relevant to explicitly assert the truism, because if the implication of the first interpretation is that “things should be forbidden by default”, then the implication of the second interpretation is that, “it’s already settled that we agree there are good reasons monopolistic locked platforms shouldn’t be allowed”.

                                                                                        Which I hope also addresses your point that:

                                                                                        instead you think the only reasonable interpretation is one that implies “things should be forbidden by default,” something that has never happened and that you couldn’t even speculate on what being forbidden by default would look like???

                                                                                        Besides the fact that it’s not unusual for people to hold a belief the logical conclusions of which are insane and they’d never agree to, but they don’t see how that is the logical conclusion, and when it is shown to them, they abandon the belief.

                                                                                        And firstly, that interpretation doesn’t jump out as even a possibility that we could charitably select above other, less charitable interpretations, given the context of the discussion up to that point.

                                                                                        In your example, the comment isn’t “there are no good reasons to allow X”, it’s “there are no good reasons to allow X just because Y”, set in a context where no one argues that X in the general case should be permissible.

                                                                                        Two differences, one in the background context, and one in the wording, but it leads the interpreter’s mind elsewhere, and things that might have required reading the commenter’s mind in this thread become things we can assume for charity’s sake in your disanalogous example.

                                                                                        In your example, it’s obvious that the discussion rests on the premise that everybody agrees killing should not be permitted in the general case and we have various reasons that people accept this, and trespassing has specifically been brought up, so the point under contention is clearly whether trespassing is a good enough reason to overturn the reasons for not killing someone.

                                                                                        In this thread, it’s not obvious at all that people all agree that locked monopolistic platforms, for example, should be permitted or not, so if a commenter says, “there are no good reasons to allow locked monopolistic platforms”, it’s perfectly reasonable to say, “things should be permitted by default”;

                                                                                        it’s essentially implying “you tell us why we should prohibit this [so we can debate the merits of your case]; we’re not going to just assume that it’s already been settled that it should be prohibited and we’re talking about hearing good, novel reasons to allow it that outweigh the reasons to prohibit it”.

                                                                                        That’s not even the charitable reading of the response to me, it’s the obvious interpretation that jumps out to me. I don’t find your less charitable version an even tenable reading.


                                                                                        None of this makes the response a tautology, though. I’m still unclear whether you’re saying it’s a truism or a tautology or both, and what definition of both of these terms you’re using.

                                                                                        As I said, I’m happy to just use your definition without debate and tell you whether it’s I think a tautology under a specific definition, but I’ll of course maintain that if you’re using tautology to mean truism or axiom, then you’re wrong and this whole discussion could have been avoided by using the term tautology correctly.

                                                                                        (And even if I charitably take your usage to mean “truism”, then it still wouldn’t work because, as I said above, the truism was, in this context, relevant to explicitly assert.)

                                                                                        1. 1

                                                                                          I understand very little of what you’ve written, and the parts that I understand I completely disagree with.

                                                                                          Besides the fact that it’s not unusual for people to hold a belief the logical conclusions of which are insane and they’d never agree to, but they don’t see how that is the logical conclusion, and when it is shown to them, they abandon the belief.

                                                                                          then wouldn’t that also apply to the castle doctrine example, if “literally speaking, that’s what they’re implying either way”?

                                                                                          if the implication of the first interpretation is that “things should be forbidden by default”, then the implication of the second interpretation is that, “it’s already settled that we agree there are good reasons monopolistic locked platforms shouldn’t be allowed”.

                                                                                          you said that it could be interpreted to mean “things should be forbidden by default.” if the second interpretation is “we have all sorts of reasons to prohibit such closed platforms and there’s no reason to allow it that outweighs the reasons to prohibit it,” that does not imply that “it’s already settled that we agree…” – it’s dumbfounding to read this.

                                                                                          1. 1

                                                                                            then wouldn’t that also apply to the castle doctrine example, if “literally speaking, that’s what they’re implying either way”?

                                                                                            As I said, your interpretation doesn’t jump out as even a possibility (to me) that we could charitably select above other, less charitable interpretations, given the context of the discussion up to that point and the exact phrasing.

                                                                                            In my castle doctrine example, given the addition of the “just because they’re trespassing”, it’s obvious that the discussion is not about killing in the general case, because I can easily interpret the disagreement as being on reasons to overturn the prohibition of killing in the case of trespassers.

                                                                                            In this case, they didn’t say, “there’s no good reason to allow locked platforms just because there are other alternatives”, they said, “there’s no good reason to allow any [their emphasis] locked platform that doesn’t allow users to […]”.

                                                                                            The more charitable interpretation just doesn’t pop out at me as easily. And that doesn’t faze me like, “no, surely he couldn’t have meant that”, because I’d probably subconsciously just chalk it down to a brain fart on their part, and they just needed a reminder of the foundational rule.

                                                                                            you said that it could be interpreted to mean “things should be forbidden by default.” if the second interpretation is “we have all sorts of reasons to prohibit such closed platforms and there’s no reason to allow it that outweighs the reasons to prohibit it,” that does not imply that “it’s already settled that we agree…” – it’s dumbfounding to read this.

                                                                                            I’m saying I can accept that someone could mean “there’s no good reason to allow it” as a shorthand for “there are no good reasons to allow it that outweigh the reasons for prohibiting it”. But they’re responding to a comment that called the whole thing “bogus” because of the diversity of choice,

                                                                                            implying that there’s no good reason to prohibit a locked platform at least in this case,

                                                                                            yet they completely ignored that to shift the burden onto the other side to bring up good reasons to allow it, as if the burden is on the people who think it should be allowed, which, as far as I can see, would only be the case if either:

                                                                                            1. it’s simply a settled matter that there are good reasons to prohibit it that outweigh the reasons for allowing it (at least for this context where there are choices) and the discussion is about overturning it (at least for this context), or
                                                                                            2. it’s not settled, so we start from an empty set of agreed-upon reasons for or against either side of whether we should allow or prohibit it, in which case, we can immediately just tack on the agreed-on default-allow reason, putting the burden for arguing their case on the ones who think it should be prohibited.

                                                                                            I’m happy to hear a third option, but as far as I can see, either it’s a settled matter and so the burden is on the pro-allowance side, or it’s not a settled matter and the person who responded to that comment to shift the burden back to the pro-prohibition side by pointing out, “things should be allowed unless there are good reasons to forbid them” was completely in the right.

                                                                                            You can’t have your cake and eat it. Again, this wouldn’t faze me, I’d chalk it down to a brain fart, which is why the reminder of the basic rule seemed natural to me.


                                                                                            At this point, I’ve explained and over-explained why I interpreted things the way I did. If you’re gonna respond that you’re dumbfounded again, I can’t really do anything more — and I’m tired of having to keep asking you about where you stand on the tautology thing and what definition you want to use or anything about that — so let’s just end it here.

                                                                                            1. 1

                                                                                              The more charitable interpretation just doesn’t pop out at me as easily. And that doesn’t faze me like, “no, surely he couldn’t have meant that”, because I’d probably subconsciously just chalk it down to a brain fart on their part, and they just needed a reminder of the foundational rule.

                                                                                              they needed a reminder of the foundational rule which has always applied and could never not apply even hypothetically… okay buddy.

                                                                                              If you’re gonna respond that you’re dumbfounded again, I can’t really do anything more — and I’m tired of having to keep asking you about where you stand on the tautology thing and what definition you want to use or anything about that — so let’s just end it here.

                                                                                              well if you’re still curious, I think the OED definition I gave is just fine: “An argument, explanation, or definition that merely restates in different words the very thing which is to be explained, shown, or defined.”

                                                                                              I thought the original statement was roughly equivalent to “if there are no good reasons to forbid something, then it should not be forbidden.” by the standards of everyday speech, I think “there are no good reasons to forbid X” is a mere restatement of “X should not be forbidden.” In contrast to a mere “reason,” a “good reason” can be understood as one that overrides the reasons for the contrary proposition.

                                                                                              best of luck to you.

                                                                                              1. 1

                                                                                                they needed a reminder of the foundational rule which has always applied and could never not apply even hypothetically… okay buddy.

                                                                                                Yeah, that’s what a brain fart is. You can end up saying things that lead to insane conclusions and all you need is a that pointed out to you to realise you messed up in your train of thought somewhere.

                                                                                                And if they didn’t mean it that way, then they simply misspoke, and again, it’s useful to clarify the implication of their words so they can rephrase.

                                                                                                I think “there are no good reasons to forbid X” is a mere restatement of “X should not be forbidden.” In contrast to a mere “reason,” a “good reason” can be understood as one that overrides the reasons for the contrary proposition.

                                                                                                I understood “good reason” as one which isn’t fallacious or based on false premises or otherwise weak. So you can have a good reason that’s still outweighed by better reasons to do the opposite.

                                                                                                But let’s take your understanding.

                                                                                                Then we can go back to the understanding of the foundational reasons to allow things by default not being part of the set of reasons being referred to in the statement, “if there are no reasons to forbid something that aren’t outweighed by reasons to allow it, then it should be allowed”, so that it can be understood as, “things should be allowed by default”.

                                                                                                Such an interpretation would charitably remove the tautology at the cost of implying that the person is themselves being uncharitable to the person they’re responding to, by implying that they don’t know, or at least haven’t considered in their prior statement, that the burden is on them to give reasons to forbid that specific thing.


                                                                                                I still think the most charitable way to interpret the whole conversation is like:

                                                                                                A: “This is bogus, there’s plenty of competition.” B: “There’s no good reason to allow any locked platforms.” C: “[Why don’t you tell us the reasons to forbid it, since] things should be allowed by default.”

                                                                                                If we apply your charity to B, we can even say:

                                                                                                A: “This is bogus, there’s plenty of competition.” B: “There’s no good reason to allow any locked platforms.” C: “[Why don’t you tell us the reasons to forbid it, since] things should be allowed by default [and the reasons given for prohibiting locked platforms, like user choice, don’t apply].”

                                                                                                A response like, “why don’t you tell us the reasons to forbid it” is susceptible to an objection like, “why are you shifting the burden to the person who asked first for reasons to allow it? are you admitting there’s no good reason to allow it?”;

                                                                                                a response like, “the reasons given for prohibiting locked platforms don’t apply here” is susceptible to a response like, “they never gave any reasons”.

                                                                                                Given how easy it is to encounter people online who think waaay differently from yourself, you can’t blame them for writing defensively by bringing it back to basics, but you’ll never please everyone, I guess.


                                                                                                At the end of this, I understand how you could have reasonably interpreted it as a tautology.

                                                                                                I hope you can also understand how I could have reasonably interpreted the comment that was itself responding to as an incorrectly placed burden of ‘proof’ to the point that it needed to be pointed out (which people do in discussion and debate all the time).

                                                                                                If we both understand each other, there’s not much reason to keep arguing the point unless you have anything new to add.

                                                                                                1. 1

                                                                                                  And if they didn’t mean it that way, then they simply misspoke, and again, it’s useful to clarify the implication of their words so they can rephrase.

                                                                                                  useful for what? I think you have to be willfully obtuse to think that they actually meant it in a way that implies the insane conclusion you suggested. if you don’t think that, we can agree to disagree, but really ask yourself if you’re being honest with yourself.

                                                                                                  so I don’t see the value in “giving them the opportunity to rephrase.” if the goal is to address the topic of conversation, it can only derail, an in this case the derailment came immediately after the tautology in the very same comment.

                                                                                                  I think “there are no good reasons to forbid X” is a mere restatement of “X should not be forbidden.” In contrast to a mere “reason,” a “good reason” can be understood as one that overrides the reasons for the contrary proposition.

                                                                                                  I understood “good reason” as one which isn’t fallacious or based on false premises or otherwise weak. So you can have a good reason that’s still outweighed by better reasons to do the opposite.

                                                                                                  that’s also a fine interpretation. two people can have different interpretations without either being incorrect.

                                                                                                  A: “This is bogus, there’s plenty of competition.” B: “There’s no good reason to allow any locked platforms.” C: “[Why don’t you tell us the reasons to forbid it, since] things should be allowed by default [and the reasons given for prohibiting locked platforms, like user choice, don’t apply].”

                                                                                                  I think this interpretation is at least as fair:

                                                                                                  A: this is bogus, there’s plenty of competition
                                                                                                  B: why don’t you tell us the reasons to forbid suing on these grounds, since we know the EU parliament decided that the type of competition that exists is not a sufficient reason?

                                                                                                  etc.

                                                                                                  I hope you can also understand how I could have reasonably interpreted the comment that was itself responding to as an incorrectly placed burden of ‘proof’ to the point that it needed to be pointed out (which people do in discussion and debate all the time).

                                                                                                  I agree that there was some rhetorical shifting of the burden of proof on both sides, but there was never agreement on who had the burden of proof to begin with. attempting to rhetorically shift the burden of proof back using a tautology is fair game, but so is pointing out that it’s a tautology. at least the previous comment, not being tautologous, meaningfully advanced the discussion… I consider bringing up a misreading of john locke to be a derailment and not meaningfully adding to the discussion, but maybe that’s just me.

                                                                                                  nice to see some convergence in a discussion for once.

                                                                                                  1. 1

                                                                                                    useful for what?

                                                                                                    To help them realise they misspoke.

                                                                                                    I think you have to be willfully obtuse to think that they actually meant it in a way that implies the insane conclusion you suggested. if you don’t think that, we can agree to disagree, but really ask yourself if you’re being honest with yourself.

                                                                                                    Not really. People shift the burden of proof in obscene ways all the time, it’s an easy trap to fall into if you’re being intellectually lazy, or are even just too lazy to type or express yourself fully on a complex topic, looking for quick, easy putdowns to say to put the matter to bed.

                                                                                                    I think it’d be insane if I believed they actually believed the implication, but I just don’t find it unusual for people to have beliefs that have extreme implications without noticing it; syllogistic reasoning is hard for most humans.

                                                                                                    so I don’t see the value in “giving them the opportunity to rephrase.” if the goal is to address the topic of conversation, it can only derail, an in this case the derailment came immediately after the tautology in the very same comment.

                                                                                                    It’s an opportunity for them to clarify your misunderstanding, giving you the more charitable interpretation that you failed to glean from the original statement.

                                                                                                    I think you have to be willfully obtuse to think that they actually meant it in a way that implies the insane conclusion you suggested.

                                                                                                    People routinely say things that have insane implications. I’ve already explained why it doesn’t faze me, but to add some thoughts here:

                                                                                                    Even if I didn’t believe they meant it that way, how else is someone meant to respond to them shifting the burden of proof onto the opposition by saying, “no good reason to allow this”, except by saying, “hold on, let’s start the conversation from the start, the burden is on you to show why it should be forbidden”?

                                                                                                    I can say that without believing that they truly mean those words but I make it clear that the only interpretation that’s coming to mind is one where their words imply insane conclusion X, and then they can just clarify.

                                                                                                    If they’d dug their heels in and explicitly said, “no, things shouldn’t be allowed by default”, then I might start thinking, “what the hell, surely they can’t mean that? I must be misunderstanding”,

                                                                                                    but before that point, you don’t really consciously question it, you might just think they misspoke, or you misunderstood, or they don’t realise the implication of their shifting of the burden of proof and would backtrack if shown it.

                                                                                                    You might also assume it was just a moment of intellectual and/or keyboard laziness, and your job is to put up that objection that the burden of proof is on them, so nobody’s sitting there thinking the pro-prohibition arguments are already settled and agreed on.

                                                                                                    I can understand why someone might be insulted, thinking, “what the hell, do they really think I don’t know that? Do they think I’m literally more extreme than every totalitarian state to ever exist?”, but that’s not necessarily the case. You’re just responding to and/or pointing out the implications of their words from the most charitable interpretation that comes to mind, even if it’s insane, and not really thinking anything of it, expecting that they’ll either realise their mistake or point out yours.

                                                                                                    This is all happening subconsciously, so you might not even really register how insane your interpretation of their words’ implications (not the words themselves) sounds, but even if you do, as I said, you’d just chalk it down to them not realising the implications due to laziness, misspeaking, or not fully thinking through their belief to its logical conclusion (or you incorrectly attributing an implication that doesn’t exist and they’ll demonstrate your mistake).

                                                                                                    I think moments like that pass by in many conversations, especially on contentious topics.

                                                                                                    I think this interpretation is at least as fair:

                                                                                                    A: this is bogus, there’s plenty of competition
                                                                                                    B: why don’t you tell us the reasons to forbid suing on these grounds, since we know the EU parliament decided that the type of competition that exists is not a sufficient reason?

                                                                                                    Ehh, I’d wonder why B didn’t just make their disagreement explicit about the EU parliament deciding that the type of competition that exists is not a sufficient reason, since A seems to be unaware of that.

                                                                                                    I agree that there was some rhetorical shifting of the burden of proof on both sides, but there was never agreement on who had the burden of proof to begin with. attempting to rhetorically shift the burden of proof back using a tautology is fair game, but so is pointing out that it’s a tautology.

                                                                                                    Let’s use truism, since we agree that it’s at least a truism under both our initial interpretations, but only a tautology under your interpretation (and even then, I’m a bit iffy on whether it’s a tautology even under that interpretation, but I can see how it can be considered one).

                                                                                                    I agree with “attempting to rhetorically shift the burden of proof back using a tautology truism is fair game”.

                                                                                                    Anyway, I don’t deny it’s fair game to point out it’s a tautology if you think so. It’s just also fair game to question why you think it’s a tautology, and you explained, and now I get it :).

                                                                                                    at least the previous comment, not being tautologous, meaningfully advanced the discussion…

                                                                                                    Agreeing on truism, not necessarily tautology, I do think reiterating a truism can meaningfully advance the discussion; it’s not about the truism itself, it’s about what’s being implied by bringing it up (in the moment that you do): “let’s go back to the basics of the topic”.

                                                                                                    I consider bringing up a misreading of john locke to be a derailment and not meaningfully adding to the discussion, but maybe that’s just me.

                                                                                                    I’m not sure where John Locke comes into this, I’m not versed enough with his works to judge if it’s a misreading, but I thought we both agreed that even the most totalitarian state doesn’t forbid things by default? Or am I misunderstanding what part of the discussion you’re referring to here?

                                                                                                    1. 2

                                                                                                      useful for what?

                                                                                                      To help them realise they misspoke.

                                                                                                      but if somebody says “I see no reason to allow killing people,” they don’t deserve the benefit of your generous help?

                                                                                                      this is getting really tiresome and you are committing inconsistencies that suggest you aren’t giving due consideration to what has already been said. for example you previously said you were happy to use “tautology” according to my preferred usage; now you are insisting on “truism.” I can address your points if you keep them to a paragraph or two, but otherwise it’s really not worth the time at this point. sorry.

                                                                                                      1. 1

                                                                                                        but if somebody says “I see no reason to allow killing people,” they don’t deserve the benefit of your generous help?

                                                                                                        I think this will just be treading well-worn ground.

                                                                                                        you previously said you were happy to use “tautology” according to my preferred usage; now you are insisting on “truism.”

                                                                                                        By that, I just meant that I’m happy to not debate what the term means. In other words, I was happy to reinterpret your prior comments where you use “tautology” and read all instances as “truism” to address you on the substance.

                                                                                                        Interpreting your prior comments with that definition and not arguing over semantics doesn’t mean I have to use the word.

                                                                                                        I suggested we use “truism” because we both agree on its definition. I was trying, for common ground, to agree with you, but didn’t want to use the word myself, as I wanted to be ultra-clear what I was agreeing to, and I didn’t want my words to be taken out of context, even accidentally.

                                                                                                        We’re already having enough trouble understanding each other, but looks like my attempt to be clearer just resulted in the opposite. I see that switching out “tautology” for “truism” may have insinuated that I interpreted you to not already have meant “truism” by “tautology” in that sentence; my bad, that wasn’t my intent.

                                                                                                        I also used the distinction, which I didn’t anticipate earlier in this thread; for example, when I say, “I don’t deny it’s fair game to point out it’s a tautology”, because I specifically meant tautology there w/ my original definition (though, thinking about it now, both are probably fair game, really).

                                                                                                        I should have clarified that I was using it with my original definition at that point. I didn’t realise in the moment how confusing I was being and just thoughtlessly used both words to signify a distinction.

                                                                                                        Which was doubly bad, because I was just making a separate point, because you weren’t even using tautology in that sense when you said, “it’s fair game to point out it’s a tautology”; I missed that because, as I was proof-reading, I saw my sentence, “I don’t deny it’s fair game to point out it’s a truism”, and wanting to specifically mean “tautology”, I ‘corrected’ that sentence, forgetting it was a response to you using the word.

                                                                                                        It’s been a long thread.

                                                                                                        I can address your points if you keep them to a paragraph or two, but otherwise it’s really not worth the time at this point. sorry.

                                                                                                        It’s hard to stick to one paragraph when there’s so much at contention every reply and, again, I’m trying to be as clear as possible.

                                                                                                        Also, don’t apologise, I think we’ve both put more than enough time into this.

                                                                                                        1. 1

                                                                                                          Interpreting your prior comments with that definition and not arguing over semantics doesn’t mean I have to use the word.

                                                                                                          I suggested we use “truism” because we both agree on its definition. I was trying, for common ground, to agree with you, but didn’t want to use the word myself, as I wanted to be ultra-clear what I was agreeing to, and I didn’t want my words to be taken out of context, even accidentally.

                                                                                                          compare this to:

                                                                                                          Just let me know which one you meant by it, I’m not interested in debating the definitions of words except to understand a third-party’s usage; between us, I’m happy to use the term tautology to mean axiom if you like.

                                                                                                          was it a mistake for me to assume that if you were happy to use “tautology” to mean “axiom,” you would be happy to use it in the sense that prompted you to say “I understand how you could have reasonably interpreted it as a tautology”? or am I on to something about you being inconsistent after such a long thread?

                                                                                                          It’s hard to stick to one paragraph when there’s so much at contention every reply and, again, I’m trying to be as clear as possible.

                                                                                                          you can strive for both clarity and succinctness while keeping to the most important points. if I addressed everything in contention in your comments, we would have an exponential explosion in comment length.

                                                                                                          1. 1

                                                                                                            was it a mistake for me to assume that if you were happy to use “tautology” to mean “axiom,” you would be happy to use it in the sense that prompted you to say “I understand how you could have reasonably interpreted it as a tautology”?

                                                                                                            I wasn’t entirely sure what you were saying here, but I went back and checked that, “I understand how […]” quote to look at the context.

                                                                                                            I wrote that in response to:

                                                                                                            I think “there are no good reasons to forbid X” is a mere restatement of “X should not be forbidden.”

                                                                                                            In other words, the use of tautology here is not “truism”, but my original definition of restating in different words, despite this part of the conversation happening pretty soon after I’d said, “let me know which one you want to use”.

                                                                                                            In fact, you say as much right before:

                                                                                                            […] and I’m tired of having to keep asking you about where you stand on the tautology thing and what definition you want to use or anything about that […]

                                                                                                            […] I think the OED definition I gave is just fine: “[…] restates in different words the very thing […]”

                                                                                                            That’d probably explain why I started using “tautology” as “restating”. Because after I kept pestering you for which definition you want to use, you stuck with the OED definition of “restat[ing]” and used the word with that definition.

                                                                                                            That might also explain why I continued to use the two words in distinct ways, and reworded (with strikethrough) your use of “tautology” to “truism” in the specific sentences where I suspected you were reverting to using it as such, to be clear that I interpreted it that way, or wanted to agree or disagree on the sentence as interpreted in that way.

                                                                                                            or am I on to something about you being inconsistent after such a long thread?

                                                                                                            As I said, I didn’t anticipate the need to use both words with their distinct meanings, instead of as synonyms, when I offered to interpret your words how you mean them without debating semantics.

                                                                                                            Beyond that, I gave multiple reasons why I started to use tautology with my original definition again. Looks like I should add to the list: I asked you which definition to use, and you chose the OED one to the list. I had forgotten that, and it seems you had, too.

                                                                                                            Probably we’ve both been inconsistent after such a long thread, at the very least in how we’ve expressed our points. It feels like you’re trying to reach for a gotcha instead of constructively trying to understand what I meant at various points.

                                                                                                            I said earlier, “I should have clarified that I was using it with my original definition at that point”. I stand by that.

                                                                                                            However, I see now that when I offered to let you choose a definition, you went with the OED one. So, I think you should take back your saying, “you previously said you were happy to use “tautology” according to my preferred usage; now you are insisting on “truism.””.

                                                                                                            I found myself considering if you were using it to mean “truism” again, despite saying to use the OED definition, so I chose to be explicit and just use “truism” when I meant that or suspected you meant that.

                                                                                                            Honestly, we should have probably just chose a third word or set of words to express ourselves for “tautology” and “truism”. I used “axiom” a few times to replace what I mean by “truism”.

                                                                                                            you can strive for both clarity and succinctness while keeping to the most important points. if I addressed everything in contention in your comments, we would have an exponential explosion in comment length.

                                                                                                            This whole thread has felt like an inquisition.

                                                                                                            My words have dumbfounded you, exasperated you, provoked snark from you, and I’ve tried my best to engage with everything I could in good faith, admit where I made mistakes, and try to find common ground.

                                                                                                            In response, it feels like, despite you calling for charitable interpretation, all you’ve done is interpret my words in the least charitable but still plausible way, trying to catch me out on contradictions (that could be resolved with some charity).

                                                                                                            So I think I can be forgiven for overexplaining myself.

                                                                                                              1. 1

                                                                                                                you don’t owe me anything and there’s nothing to forgive. I just think you could benefit from learning to focus on what’s important and to express yourself more clearly and succinctly.

                                                                                                                it seems that we have largely resolved the question that started this thread. I’m not sure there’s much reason to continue. you seemed interested in why I thought you contradicted yourself, and I am still not convinced by your defense – my honest impression is that you are incapable of admitting a mistake, a very unfortunate condition, so I thought that showing it to you clearly might help. but if you aren’t enjoying the “inquisition” then I won’t keep pushing. and if you have admitted a mistake in this thread I wouldn’t mind seeing where so I can account for why I would have missed it. otherwise good luck.

                                                                                                                1. 1

                                                                                                                  my honest impression is that you are incapable of admitting a mistake, a very unfortunate condition, so I thought that showing it to you clearly might help.

                                                                                                                  I admitted several mistakes in this thread, AFAICT you admitted none.

                                                                                                                  if you have admitted a mistake in this thread I wouldn’t mind seeing

                                                                                                                  At least here:

                                                                                                                  As I said, I didn’t anticipate the need to use both words with their distinct meanings, instead of as synonyms, when I offered to interpret your words how you mean them without debating semantics.

                                                                                                                  and here:

                                                                                                                  I should have clarified that I was using it with my original definition at that point. I didn’t realise in the moment how confusing I was being and just thoughtlessly used both words to signify a distinction.

                                                                                                                  Which was doubly bad, because […]; I missed that because […], and wanting to […], I ‘corrected’ that sentence, forgetting it was […].

                                                                                2. 29

                                                                                  Mobile phones are important as their own category, laptops don’t replace them.

                                                                                  In the mobile market in the EU there is a strong Apple + Google duopoly. Apple does whatever they want, and Google has no incentive to be any better, because there’s no third mass-market option that could threaten their business.

                                                                                  Android is also becoming increasingly more closed. Google uses access to the PlayStore and its proprietary Android libraries (required by lots of apps) as a way to control Android vendors, and prevent them from removing Google’s self-promotion and control from Android.

                                                                                  This isn’t a healthy competitive market. It’s two landlords who can dictate any terms they want.

                                                                                  1. 21

                                                                                    The EU is going after Apple at the behest of companies like Spotify and Epic.

                                                                                    This is a fight between large companies and we have to hope that we don’t get trampled in the process.

                                                                                    1. 19

                                                                                      The EU is going after Apple at the behest of companies like Spotify and Epic.

                                                                                      This is not incorrect, but imprecise…

                                                                                      This is a fight between large companies and we just have to hope we don’t get >trampled in the process.

                                                                                      …and this is incorrect. The actual situation is as follows: The European Commission has formally asserted that Apple is a “gatekeeper” under Art. 3 DMA on 2023-09-06. Art. 3(1) DMA gives the criteria when a “gatekeeper” is to be assumed. Art. 3(4) DMA mandates the Commission to designate a company as a “gatekeeper” ex officio and does not depend on a request from a private party. The formal designation as a “gatekeeper” by the Commission causes certain duties of interoperability for the designated which are laid out in other articles of the DMA.

                                                                                      About a year later, the Commission has started a proceedings against Apple due to violation of its gatekeeper responsibilities under the DMA as per Art. 8(2) DMA This article, again, allows the Commission to act ex officio without a preceeding private request. This latter proceedings does not yet seem to have come to a conclusive decision. Ultimately, this second proceedings may lead to a fine against Apple (Artt. 29, 30 DMA).

                                                                                      From the talk’s description – I have not watched the talk myself – I conclude that Apple is challenging the first decision – the designation as a gatekeeper under Art. 3 DMA by the Commission – in court now. That decision of the Commission is formally binding against a specific private company (Apple) and can as such be brought directly before the European Courts as per Art. 263(4) TFEU. As per Art. 256(1)(1) TFEU, it is to be brought before the European Court of the first instance, which is not – as the headline implies – “the EU’s highest court”, but rather, well, the court of the first instance. Against this court’s decision it is possible to appeal as per Art. 256(1)(2) TFEU to the Court of Justice of the European Union, which then is the “highest EU court” for this case as it is not possible to further contest its decision.

                                                                                      If the courts decide in favour of Apple, the Commission’s designation of Apple as a “gatekeeper” is void and Apple does not have to comply with the DMA at all, making the aforementioned second proceedings irrelevant.

                                                                                      While to my knowledge the Commission has not publically said that it received requests by Epic or other companies to act against Apple, it did publically request feedback during the aforementioned proceedings and it is only likely that Epic and others have submitted such feedback. German media outlets did report about complaints by Epic and other companies but I was unable to find an official acknowledgement of the Commission of this.

                                                                                      In any case, Epic and other companies are not direct parties to the lawsuit at hand, and neither is the FSFE. It is a lawsuit between Apple the European Commission in the first place, and any other people are only involved on a secondary level, which may include – as it seems to be the case with the FSFE – some special privilegues, which probably mostly amount to the ability to testify in some way or another. I’m not firm enough in CJEU process law to answer this question in detail. As is however widely known, CJEU process law does not include a possibility to submit amicus curiae briefs, thus the FSFE’s formal secondary involvement probably is intended to substitute that.

                                                                                    2. 15

                                                                                      Here’s a simple one: without the DMA, you cannot run actual Chrome or Firefox on iOS. They’re just skins on top of Safari’s WebKit.

                                                                                      Oh, want to run an emulator on iOS? That was banned by their Store Guidelines. These are software blocks that artificially limit what you can run on hardware you’re supposed to own.

                                                                                      I have an old iPod I can’t really use anymore, because the iTunes Store APIs have changed, and it can’t talk to Apple anymore.

                                                                                      Here’s a possible future we avoided: without anti-competitive legislation, we might all still be stuck supporting Internet Explorer. The web exploded once that monopolistic lever was cut.

                                                                                      If it weren’t for being stuck in Apple’s castle, an iPhone would be on the cards, as the hardware is generally better than the rest. But then I’m stuck with the artificial limitations Apple enforce, that aren’t a function of the hardware. Heck, even Apple laptops pre-ARM were more functional running Windows than macOS because of the way they lock down hardware with their software. I still use Windows on my old MacBook Air because (for me), it’s actually better. I’d love to be able to do similar with their phones.

                                                                                      1. 13

                                                                                        Sounds bogus to me. There’s a gazillion hardware platforms. Pick an android device. Pick any of a thousand laptop brands.

                                                                                        In other words, don’t enforce the law?

                                                                                        Apple doesn’t have to do business in the EU. Pick another market.

                                                                                          1. 5

                                                                                            I mean, sure, it’s a GUI demo, not an actual app. To be fair, maybe I’m just easily impressed and there are far better graphical frameworks out there (since, as one comment says, this only seems to be focusing on the graphical part of GUI).

                                                                                            I agree with all the critical comments here that were posted after me, so maybe I just saw shiny and spoke too quickly. There’s definitely plenty to criticise, and the line count is not on a 1-for-1 basis, since all the existing GUI libraries are complex for many reasons as is being talked about: accessibility, input handling, font processing, OS integration, etc. — each of which brings in a whole sublist of difficult problems by itself, e.g. rendering complex scripts for font processing.

                                                                                            1. 6

                                                                                              Audio apps tend to make nice, shortish demos because they are made out of repeated parts. Each individual control might be some effort, but then you just loop it over a bunch of channels, and there’s your whole UI. This helps in usage too, like yeah, maybe it is 64 controls, but the user needs to learn 4 of them, and the rest is duplicated over 16 different inputs. (And actually, their demo only has 5 channels, whereas midi is usually 16 channels… it can be hard to make space to show them all on screen! (Though drawing them is usually trivial; “thousands of frames per second” doesn’t really matter because most things rarely change.)

                                                                                              I’m tempted to try to make something with my gui lib that is similar to this, and I think it would come in with a favorable line count too. One thing to realize is a lot of the controls here are actually just custom-drawn standard interactions - when they say “There is no cheating here, no hidden stylesheets or textures, no pre-built library of fancy buttons and effects.” I’m again meh on it…. you’re providing a pre-built library! So it isn’t “cheating” to, for example, subclass the generic slider control to provide a new graphical skin while reusing the rest of the interaction. That’s probably exactly what you’d expect a generic gui library to provide!

                                                                                              For example, when I look at those knobs, I don’t see a from-scratch custom widget. I see a standard slider control - in html terms, <input type="range">, with a custom drawn skin (it’d take a lot of css and -prefixed-properties to do that with html, but you can do it, and wit a desktop gui library it is reasonable to expect you to be able to do some kind of class Knob : Slider { override void paint() {} } thing. Ideally, you’d use two-dimensional input, so dragging it up is the same as dragging it right, but that’s not even a necessary part of it; the knobs will feel perfectly natural as a reskinned horizontal slider. You don’t really move the mouse in a circle to turn the knob, you just grab it and move left or right. What, exactly, “grab it” means might be another thing to customize, since in the standard slider, you need to grab the handle, which is a proportional fraction of the track range, and here you probably want to click anywhere, but again, you can probably customize this in a subclass. (Thinking about this in my library, overriding paint is easy, overriding the mouse grab is a bit trickier, you’d need to override the default mouse down method and redirect that to the thumb… or the recompute child layout method, to do custom proportions of the thumb size, then also override the child paint since now the thumb is what actually draws. It’d take…. prolly idk 30 lines of code to make it work, maybe more if I’m forgetting something, which is more than I’d prefer to admit. But even if you did have to override the mouse down/up/move handlers - which, in addition to the paint method feels like doing basically the whole control again, you still come out ahead since the default keyboard, context menu, external event api, and ui automation / accessibility hooks all remain intact. So it feels like redoing it on the surface, but you still benefit from the rest of that deep sea iceburg stuff.

                                                                                              Anyway, that’s knobs, but volume sliders are an even more obvious skin on a standard slider control, vertical this time. There’s reskinned radio buttons on the right, and bottom, reskinned toggle buttons above. Animated display things for the waveforms, but since there’s no user interaction, that’s just class WaveDisplay : GenericWidget { override paint() {} }, among the simplest possible cases.

                                                                                              Then that piano control, I wrote one of those for my midi program too, it looks fairly big, but really, you pay attention to getting one octave right, then loop that to show the whole thing. the hover/click effects are a two layer bounding box (white keys then black keys plus one on the z-order), so not complicated. I did that from scratch in my application. I didn’t use those legit beautiful gradients (i do love gradients…) but again changing fillRectangle to drawGradient isn’t rocket science. One tricky thing might be on the click and drag: suppose the user clicks down, drags off your window, then releases the mouse button? Does your application miss the mouse up event and think it is still dragged? I’d note the default behavior from the OS on this is different on Windows and X11. (… and I’m not even sure about Mac, I should try it.) So it is a subtle thing that isn’t exactly hard to get right, but a little thing you might not even know to test unless you’ve done it before.

                                                                                              Lastly, that ASDR dialog is cute, but we see the same knob-slider control again, then the graph is a static display…. almost. You can click those dots and move them. My lib has a class called MouseActivtatedWidget for that kind of thing but using it is a pain in the button, so you’d probably do it from scratch there. Can punt the ui automation concerns to the sliders; the basic control still works if the user is typing in values too (something you ought to let them do!) so I look at the graph display as a progressive enhancement.

                                                                                              So again, I agree it is a pretty demo, but scratching beneath the surface leaves a bit to be desired. What they reject as “cheating” is what I see as the key reason to use a gui library - there’s a lot more to these interactions than just drawing, and being able to hook your custom drawing into that existing backend infrastructure is a big benefit, not a cheat.

                                                                                          2. 50

                                                                                            A next-gen scripting language; I feel like the current ontology of “Python, Ruby, JS and sometimes Lua” has some good room for improvement from the functional language/Rust/Gleam culture. Something with a strong-ish type system with sum types instead of 1990’s “OO everything”, gradual typing built in from the start, and still keeping an emphasis on fast iteration and smooth development. A compiler built around JIT or incremental recompilation might be nice. Julia and Crystal are steps in the right direction but personally neither really quite makes the leap from “good” to “excellent enough to want to learn and use vs just bashing something out in Python”. Roc might be going in the direction I want?

                                                                                            A language-agnostic program runtime and software build/distribution system that stores programs and libraries as wasm or another openly-specified bytecode, then makes CPU-portable and efficient programs by AoT-compiling them to super-optimized static native code on installation. You know, like Android does with dex. I think this solves a lot of the issues that currently exist with DLL’s. It would let people distribute code as portable binary libraries, build code with portable libraries, not have the runtime overhead calling of dynamic linking, and enable the code inlining and optimizations it disallows. But you could still do things like distribute updated libraries or make plugins for a program (again as bytecode), plop them on an existing computer, and the system would just recompile the programs that need them. The main downside is it’s pretty difficult to always go from bytecode to native code as well as you can go from source code to native code.

                                                                                            A browser scripting environment that enables automatic FFI generation for any language that can target wasm. This kinda exists but has the Slight Issue that any language using it essentially has to be able to talk with JS’s bonkers object model and API assumptions, which usually isn’t worth the effort vs just writing your damn thing in JS.

                                                                                            A web browser that takes a sane subset of HTML and the browser API, and comes with lots of conformance and test suites so other people can make other browsers using the same subset of functionality.

                                                                                            Something nicer than email, intended for resilience and abuse-resistance. (I’m dreaming about it, I don’t know how to do it.)

                                                                                            Something nicer than Discord/Zulip/whatever for chat, built around a peer-to-peer pubsub model from the start but less grotty than XMPP.

                                                                                            Something nicer than IPFS for sharing host-anywhere content-hashed data. And then a crypto identity system built on top of it that lets you do public-key signing and encryption of messages and stuff.

                                                                                            About a million video games.

                                                                                            …yeah, I don’t understand the people who ask “how do you come up with ideas for things to build?”

                                                                                            1. 7

                                                                                              Reminds me of UNCOL, TenDRA TDF, ANDF, Taos/Taos and even LLVM bitcode. Some more successful than others, some more effective at being actually architecture-neutral than others.

                                                                                              1. 4

                                                                                                Also ChrysaLisp, which is made by a former Taos engineer. It’s both a reimplementation/imagining of TaoVM, and an entire desktop environment and Lisp dialect, but you could focus just on the VM part.

                                                                                                1. 2

                                                                                                  Oooh, thanks! Sounds like there’s lots of prior art to learn the mistakes of then. :D

                                                                                                2. 6

                                                                                                  I’ve (not) been working on this in the background as a long-term project for a while, now, as someone who has zero experience with writing compilers; I call it Rumland (it was initially a pie in the sky idea of an ML-inspired typed scripting language that compiles to Ruby or otherwise interoperates w/ the Ruby ecosystem, then I decided to just do the most minimal, fastest-compiling ML-inspired typed scripting language I could.)

                                                                                                  I wanted a scripting language like a mini-Haskell that can do cold builds of at least small scale personal programs (< 100k SLOC), including linking, within tens of milliseconds on a half-decade-old mid-range machine. I wouldn’t mind compiling mid-range programs like ~500k SLOC w/ dozens of transitive dependencies that fast as well, but the main focus is personal programs of < 10k SLOC, then small (but really nice to use and good looking of course) open source projects off less than 100k SLOC.

                                                                                                  As soon as I get it compiling a very minimal language of only ADTs, functions, basic effect tracking, imports, and a tiny stdlib, I’ll lock any further changes that don’t maintain that build performance; if I have to give up all the Haskell-inspired niceties I have in mind, I’ll do it. (It’s not a public project, but I may one day make it one.)

                                                                                                  I’ve been keeping an eye on Roc as well, and it hits a lot of the same stuff I started this project for; I love that they do their own linking (and I love the recent growth in interest in linker performance in general, e.g. mold, wild).

                                                                                                  1. 4

                                                                                                    neither really quite makes the leap from “good” to “excellent enough to want to learn and use vs just bashing something out in Python”.

                                                                                                    This is the problem, though. Nothing can make a very compelling case vs. using Python, at least not enough to justify the learning cost. Of the languages you list, you can already use Gleam/Elixir for scripting. There’s also F# - I’ve personally used it as a scripting language for quite a bit. You have always been able to use lisps like Racket or Clojure (via Babashka) for scripting, and there’s a slew of neolangs that try to innovate in this space. But there’s nothing so compelling that would make you want to give up everything you have. Nobody wants to give up the comforts of a familiar language to learn one that is marginally better, and at the end of the day, that’s what all of these “next-gen” improvements are. That’s one of the reasons why I’m looking forward to the upcoming stabilization of cargo-script; Instead of a new language that has all the shiny features of rust that make it comy for me to use, I’d rather just use rust for scripting too, if I can help it.

                                                                                                    1. 6

                                                                                                      Yeah, but I’m a language nerd, so if the language is neat then for me the learning cost is potentially negative. :-P And lately a lot of my own scripting-language needs are not “get this big program to work robustly” or even “do a lot of talking with this particular domain-specific library”, but just juggling and automating fairly basic things. It feels kinda wrong to use Elixir or F# for such things, though maybe I should work harder on giving it a go. Jank also looks like it might make me actually want to write clojure, too.

                                                                                                      It’s just… It’s not that hard to write a shell-script-like pipeline that’s nicer than Python’s subprocess lib, and I would kick a puppy to the moon for something with the built-in facility to take a bunch of JSON, stuff it into a an in-memory table (or even a persistent one), and let me query it like the database it is instead of rolling my own indices and joins with hashtables checking for the fields I care about. …hell, that alone might be a killer feature to build a language around. There’s lots of annoying REST API’s out there that force you to do this sort of thing to get the information you want.

                                                                                                      1. 3

                                                                                                        And lately a lot of my own scripting-language needs are not “get this big program to work robustly” or even “do a lot of talking with this particular domain-specific library”, but just juggling and automating fairly basic things. […]

                                                                                                        It’s just… It’s not that hard to write a shell-script-like pipeline that’s nicer than Python’s subprocess lib

                                                                                                        And in the parent comment:

                                                                                                        A next-gen scripting language; I feel like the current ontology of “Python, Ruby, JS and sometimes Lua” has some good room for improvement from the functional language/Rust/Gleam culture. Something with a strong-ish type system with sum types instead of 1990’s “OO everything”, gradual typing built in from the start, and still keeping an emphasis on fast iteration and smooth development. A compiler built around JIT or incremental recompilation might be nice.

                                                                                                        These strike me as requirements for very different languages: the first one is a shell language that revolves around running pipelines of commands while the second is a more traditional scripting language.

                                                                                                        But the idea of exposing an SQLite database as a type in a shell language is interesting. I’ve been thinking of a slightly different angle: streaming an SQLite table contents as a way of providing statically-typed pipelines (still very fuzzy admittedly).

                                                                                                        1. 3

                                                                                                          I’d say F# fits what you want, especially the last bit. You can use LINQ to query over an array, so you could do basically everything you wrote. The only sticking point would be calling subprocesses, but I’m sure there’s a library that makes it easier, or you could write the boilerplate for that once and put it on nuget.

                                                                                                          1. 1

                                                                                                            Hmmm, thanks. I’ve used F# before for medium-sized things and it’s been pleasant but I’ve never tried using it for scripting stuff. Given that u/pyj agrees with you in the sibling comment, I’ll give it a try sometime.

                                                                                                          2. 2

                                                                                                            take a bunch of JSON, stuff it into a an in-memory table (or even a persistent one), and let me query it like the database

                                                                                                            Have you played with kdb+/q at all?

                                                                                                            1. 1

                                                                                                              Never heard of it, I’ll have to check it out! Thanks.

                                                                                                              1. 1

                                                                                                                Somewhat in that direction is my Next Generation Shell. Preparing arguments for calling external programs, running external programs (curl to JSON API for example), parsing their output, handling their exit codes properly, small scale data manipulation are the intended use cases.

                                                                                                                Small scripts “should not suffer” from language capabilities (no public static void main). If you decide to have main() you get automatic parsing of command line arguments to fit main() definition, of which you can have several because it’s a multimethod.

                                                                                                                https://github.com/ngs-lang/ngs

                                                                                                                https://github.com/ngs-lang/ngs/wiki/Use-Cases

                                                                                                                Hope this helps

                                                                                                              2. 5

                                                                                                                Racker or Clojure

                                                                                                                and also Common Lisp, specially with http://ciel-lang.org/ which can be seen as Babashka-like (without the platform limitations):

                                                                                                                • it’s a batteries included Common Lisp binary
                                                                                                                • that runs scripts fast, without a compilation step
                                                                                                                • that improves on common pain points for newcomers
                                                                                                                • it’s also a core image and a normal library, so than we can code interactively in our editor.

                                                                                                                it’s still alhpa, we are refining it and adding more features.

                                                                                                                1. 2

                                                                                                                  Ciel looks really cool. I read the docs yesterday and liked almost everything I saw. I feel like I want to start a new project with it, or maybe retrofit one I’ve started but haven’t done much with yet.

                                                                                                                2. 1

                                                                                                                  There’s also F# - I’ve personally used it as a scripting language for quite a bit

                                                                                                                  I also tried using F# as a scripting replacement for Python, and had very similar experience and opinion as what you found. It was amazing to me how great it worked with .Net Core across Windows/Mac/Linux.

                                                                                                                3. 3

                                                                                                                  …yeah, I don’t understand the people who ask “how do you come up with ideas for things to build?”

                                                                                                                  I don’t ask that exactly, but I do get stuck not having enough ideas about how to implement those ideas.

                                                                                                                  About a million video games.

                                                                                                                  This in particular, I have long lists of ideas but any one of them is just discouraging to think about how to produce the intended effect. I have a resolution to do at least one game jam this year, the last two years I’ve struggled after a fairly productive 2022 (when I was between jobs).

                                                                                                                  1. 3

                                                                                                                    but I do get stuck not having enough ideas about how to implement those ideas.

                                                                                                                    Hmmm, do we need «What software you’d try implementing, but would want to discuss implementation design first» threads?

                                                                                                                  2. 2

                                                                                                                    On the next-gen scripting language thing… and having chatted with you a bit about some of the past work we’ve both done… one thing I was thinking about the other day on the way back from a flight test campaign was how much the Lua scripting in ArduPilot scares me. It’s an incredibly powerful feature but also seems like it has potential to have unbounded runtime that could cause problems.

                                                                                                                    A potential solution I scribbled down was to use a more limited VM that is amenable to ahead-of-time verification for bounded execution time and remembered https://ebpf.io/. The pseudo-C code that you use to write most eBPF code is… not great and a long way away from being an easy scripting language, but it seems like a language similar to what you’re describing could be compiled down to something like eBPF and used safely for that kind of scripting.

                                                                                                                    1. 2

                                                                                                                      Ooh, yeah, scripting for high-safety systems sounds like a very interesting and very tricky proposition. Verification would be good, but you’d probably also need a good simulation framework. Do it well and there might be a pretty great market for it though, and Eris knows it’s a market that needs more convenient tools!

                                                                                                                    2. 2

                                                                                                                      Something nicer than IPFS for sharing host-anywhere content-hashed data.

                                                                                                                      It’s relatively easy to take https://github.com/n0-computer/iroh nowadays, and either built-in https://www.iroh.computer/proto/iroh-blobs , or just something custom with bao for incremental hash verification. Depending on what you want it to do exactly, could be a little spin on top of the minimal demo app they have: https://github.com/n0-computer/sendme

                                                                                                                      Something nicer than Discord/Zulip/whatever for chat, built around a peer-to-peer pubsub model from the start but less grotty than XMPP.

                                                                                                                      Something nicer than email, intended for resilience and abuse-resistance. (I’m dreaming about it, I don’t know how to do it.)

                                                                                                                      These are two things I could try to incorporate into https://github.com/dpc/rostra

                                                                                                                      With email-like applications the whole problem is the high level “how to do it”. We’d want something that anyone (or a lot of potential senders) could send you an email while preventing spam and abuse. These two contradict each other. I’m hoping a “only friend of my friends” could be a reasonable mdidleground, which is adjacent to what I’m already implementing.

                                                                                                                      1. 2

                                                                                                                        Something nicer than IPFS for sharing host-anywhere content-hashed data. And then a crypto identity system built on top of it that lets you do public-key signing and encryption of messages and stuff.

                                                                                                                        Sounds rather like Veilid

                                                                                                                        1. 2

                                                                                                                          Something nicer than IPFS for sharing host-anywhere content-hashed data. And then a crypto identity system built on top of it that lets you do public-key signing and encryption of messages and stuff.

                                                                                                                          You might be interested in Peergos, which does cryptographic identity, signing and encryption on top of a much more efficient ipfs implementation.

                                                                                                                          https://book.peergos.org

                                                                                                                          1. 2

                                                                                                                            I think this solves a lot of the issues that currently exist with DLL’s. It would let people distribute code as portable binary libraries, build code with portable libraries, not have the runtime overhead calling of dynamic linking, and enable the code inlining and optimizations it disallows.

                                                                                                                            This sounds interesting. What would the ABI look like across langs?

                                                                                                                            1. 2

                                                                                                                              I dunno! Probably a lot like what any ABI looks like, which will be imperfect by necessity. The nice thing about wasm is you can use unmanaged memory with it, mostly unlike JVM or .NET, but then adding managed memory a la the GC proposal is a bit of a mess. So I kinda feel like the ABI is not the special part here and will never be able to be perfect, it just has to be something that does the job pretty well. An AOT compiler/optimizer should hopefully be able to make most of the ABI go away with whole-program opt when the program is turned into native code.

                                                                                                                            2. 1

                                                                                                                              Something nicer than Discord/Zulip/whatever for chat, built around a peer-to-peer pubsub model from the start but less grotty than XMPP.

                                                                                                                              Not less “grotty” than XMPP, because it’s built on top of XMPP, but I recently found Applesauce, a project that plans to use https://spritely.institute/ and XMPP to build a peer-to-peer pubsub social networking platform like you describe.

                                                                                                                              1. 8

                                                                                                                                The stylesheet seems broken for me (Upvote icon replaced by black rectangle. Also text seems a deeper/harsher black? I’m on Chromium on Linux).

                                                                                                                                1. 4

                                                                                                                                  Confirm, in Chromium on Linux the triangle is now a black rectangle. (Also the border around the text editing box for comments is not showing.)

                                                                                                                                  1. 3

                                                                                                                                    I get a white rectangle, and it doesn’t change when I upvote something.

                                                                                                                                    1. 2

                                                                                                                                      Yup. stylesheet is completely broken and upvoting no longer works.

                                                                                                                                      1. 1

                                                                                                                                        It still works AFAICT, it just isn’t reflected on the UI.

                                                                                                                                    2. 18

                                                                                                                                      Absolutely wild rollercoaster of a story.

                                                                                                                                      1. 8

                                                                                                                                        I got to the part about divisors of ******* (removed for spoilers) and decided it was time to bust out “L’s Theme”, track four of the Death Note OST, and continue reading.

                                                                                                                                      2. 41

                                                                                                                                        hi, i’m daniel. i’m a 15-year-old high school junior. in my free time, i hack billion dollar companies and build cool stuff.

                                                                                                                                        Best intro ever.

                                                                                                                                        Signal instantly dismissed my report, saying it wasn’t their responsibility and it was up to users to hide their identity: “Signal has never attempted to fully replicate the set of network-layer anonymity features that projects like Wireguard, Tor, and other open-source VPN software can provide”.

                                                                                                                                        Kind of surprised by this response. Signal already generates link previews through a proxy specifically to avoid this kind of thing.

                                                                                                                                        However, I did a quick test using two Signal accounts and it appears that images from unknown numbers are not auto-downloaded; you have to accept the message request first. This heavily mitigates the issue and honestly I understand Signal’s stance given the context.

                                                                                                                                        Additionally if you’re concerned about this you can disable media auto-download, even from contacts, in Settings -> Data and storage (though that doesn’t help for progile pictures, if it turns out the caching service used for those is also vulnerable).

                                                                                                                                        Anyway, great writeup, fun to read.

                                                                                                                                        1. 10

                                                                                                                                          No matter what the weakest point of Signal is its cloud infrastructure and usage of phone numbers. If you’re worried about these kinds of attacks it’s in your best interest not to use Signal or any other chat provider with a complex cloud deployment.

                                                                                                                                          1. 5

                                                                                                                                            it’s in your best interest not to use Signal or any other chat provider with a complex cloud deployment.

                                                                                                                                            Okay, so what is it? What are you using instead? Manually writing ciphertext via physical mail yourself? Afterall, your computer used “a complex cloud deployment” to get to the state it’s in, so it cannot be trusted.

                                                                                                                                              1. 17

                                                                                                                                                You don’t need to share your phone number with other people anymore.

                                                                                                                                                Phone number still needed to sign up.

                                                                                                                                                1. 5

                                                                                                                                                  I just downloaded the app and couldn’t get past the phone number screen. So this appears to be untrue.

                                                                                                                                              2. 5

                                                                                                                                                ah, thanks for your testing

                                                                                                                                                yeah, this should not be understood as a Signal-specific attack. geo location is a topic where privacy defenses are just woefully inadequate across the board. as a privacy person I can attest that using a VPN won’t necessarily help, though it will help against this specific type of attack.

                                                                                                                                                1. 3

                                                                                                                                                  Kind of surprised by this response. Signal already generates link previews through a proxy specifically to avoid this kind of thing.

                                                                                                                                                  If I am understanding their article correctly, they are mostly talking about downloading assets from the original source through the anonymizing proxy system they have setup, not their own content which is the core issue here. I wonder if their fix for this would be to just use that same proxy to access their own cdn’ed content as well.

                                                                                                                                                  1. 2

                                                                                                                                                    Signal instantly dismissed my report, saying it wasn’t their responsibility and it was up to users to hide their identity: “Signal has never attempted to fully replicate the set of network-layer anonymity features that projects like Wireguard, Tor, and other open-source VPN software can provide”.

                                                                                                                                                    Not only have they never attempted it, they also seem to have no interest in doing so in the future either. I offered to start work on integrating tor routing into the app for text and data flows. Never heard anything back:

                                                                                                                                                    https://community.signalusers.org/t/use-an-anonymizing-overlay-network/62670/1

                                                                                                                                                    1. 2

                                                                                                                                                      Yeah I was also thinking about their past blogs mentioning the proxy-ing. They also do the same thing for GIFs (which is mentioned in the article you linked but worth also pointing out here for visibility).

                                                                                                                                                      Signal’s security FAQ shows a profile picture in the message request screen. Is that not the case for you? Is it shown in the conversation list screen?
                                                                                                                                                      IIRC it was shown before, maybe the docs are outdated.

                                                                                                                                                      1. 5

                                                                                                                                                        Just tried it again but using a custom profile picture on the other account, and it appears not to download the profile picture until you tap on it. But I’m now realizing that the placeholders for the supposedly-not-downloaded images and profile picture are blurred versions of the originals. So if the blurred version is also cached, that would mean that this in indeed a zero-click (or one-click if the caching for profile pictures isn’t vulnerable) on Signal. I might check it out later.

                                                                                                                                                        1. 7

                                                                                                                                                          Often the blurred version in apps like this are constructed using techniques like BlurHash, where a tiny blurred version is delivered inline as part of the backend response to provide an immediate fallback. This issue for Signal Desktop seems to imply this is how this is done. In that case there’s no publicly cached response which can be used to side channel attack in the way described in the article.

                                                                                                                                                      2. 1

                                                                                                                                                        I love how he wrote only that first paragraph in all lowercase.

                                                                                                                                                      3. 4
                                                                                                                                                        • fd (instead of GNU find)
                                                                                                                                                        • rg (instead of recursive grep)
                                                                                                                                                        • tsk (instead of JIRA)
                                                                                                                                                        • rc (instead of bash; for scripts)
                                                                                                                                                        • fish (instead of zsh; interactive shell)
                                                                                                                                                        • dnsi (instead of nslookup/dig)
                                                                                                                                                        • glow
                                                                                                                                                        • entr
                                                                                                                                                        • lf
                                                                                                                                                        • ncdu
                                                                                                                                                        • tree
                                                                                                                                                        • pa for passwords, though I may swap this out
                                                                                                                                                        • direnv

                                                                                                                                                        Eventually I’m tossing around the idea of an AWK implementation that uses Pike’s structural regex and capture groups instead of FS, but we’ll see if I get to it.

                                                                                                                                                        1. 3

                                                                                                                                                          ayy i wrote pa - any reason for wanting to swap it out ooc?

                                                                                                                                                          1. 2

                                                                                                                                                            I haven’t decided if I will or not. I’m likely looking to unify my usage with agenix and maybe bitwarden for syncing. We’ll see though, I haven’t investigated too much yet. pa is nice and simple, so it works for scripts really well. It’s not quite clear to me how it decrypts the vault though? I haven’t dug through the code, but the fact that I can just do pa show ... without any sort of decryption/password step concerns me slightly and has prevented me from putting more in it.

                                                                                                                                                          2. 2

                                                                                                                                                            Thanks for introducing me to tsk, I like it a lot!

                                                                                                                                                              1. 2

                                                                                                                                                                The original plan9 version has docs here.

                                                                                                                                                                I usually use this version, though I found some bugs with child processes getting orphaned improperly that might push me to either fork it or try out the plan9port version.

                                                                                                                                                                rc is much nicer to script than (ba)sh IMO, and I control all of my systems /shrug

                                                                                                                                                            1. 4

                                                                                                                                                              Huh… before he mentioned that the directory for tomorrow’s date was created early, I was waiting for the bug to be that a sync-spam run started at 11:59pm would check the current date at 12:01am.

                                                                                                                                                              1. 9

                                                                                                                                                                Time and again the FSF has pulled this trickery that essentially amounts to an argument that the GPL covers an API, and that the API is by extension copyrightable. The Objective-C front end for GCC was another, nearly contemporary example.

                                                                                                                                                                They can’t have it both ways. Either it’s a GPL violation to require the user to link to a GPL library, because the library’s API is copyrighted and covered by the GPL, but also Oracle gets to sue anyone who reimplements the Java standard library; or APIs are not copyrightable and a non-GPL program can use a GPL library’s API, requiring the user to link to the actual copyrighted, GPL’d implementation – perhaps under the assumption someone will one day create a non-GPL’d implementation of the same API.

                                                                                                                                                                See also the Linux-syscall-note, only really needed because Linus had to stop the FSF pulling this argument on any program ever compiled for Linux.

                                                                                                                                                                1. 4

                                                                                                                                                                  I’m not a lawyer, but it seems reasonable to me to consider the Objective-C frontend scheme subterfuge, because as far as I understand it from rms’ message here, it was supposed to be included as a single “program” to the user, i.e. the compiler, so breaking it up into a proprietary frontend and libre backend, then distributing both separately, where the intention is clearly to link one with the other into one program, the gcc backend is clearly part of the program, but simply being distributed separately.

                                                                                                                                                                  The CLISP case is different. He proposed distributing a replacement for libreadline. I’m not sure how one can infer “that the one part clearly shows the intention for incorporation of the other part”. Packaging libnoreadline.a with lisp.a while separately distributing libreadline.a as an alternative to libnoreadline.a doesn’t demonstrate that lisp.a and libreadline.a are one program.

                                                                                                                                                                  He could just as easily stop distributing libreadline.a, even separately and simply link to its GNU site as an alternative, hell, he could decide not to even link to it or mention it at all. His program would still work. Because it’s a completely separate program, with part of it being a reimplementation of libreadline.a.

                                                                                                                                                                  1. 4

                                                                                                                                                                    Agreed. I believe that the fact that CLISP was originally developed for Atari ST with no readline in sight would have been pretty important to the judge. RMS failed to recognize the difference in the situation, in my opinion. It would have been a different case if they have built it using readline to shape the user experience, then decided to stub it out and act as if it’s up to the user, wink wink. Which they didn’t.

                                                                                                                                                                  2. 4

                                                                                                                                                                    The Objective-C front end for GCC was another, nearly contemporary example.

                                                                                                                                                                    If you read far enough down the original linked thread, RMS discusses this:

                                                                                                                                                                    I say this based on discussions I had with our lawyer long ago. The issue first arose when NeXT proposed to distribute a modified GCC in two parts and let the user link them. Jobs asked me whether this was lawful. It seemed to me at the time that it was, following reasoning like what you are using; but since the result was very undesirable for free software, I said I would have to ask the lawyer.

                                                                                                                                                                    What the lawyer said surprised me; he said that judges would consider such schemes to be “subterfuges” and would be very harsh toward them. He said a judge would ask whether it is “really” one program, rather than how it is labeled.

                                                                                                                                                                    So I went back to Jobs and said we believed his plan was not allowed by the GPL.

                                                                                                                                                                    The direct result of this is that we now have an Objective C front end. They had wanted to distribute the Objective C parser as a separate proprietary package to link with the GCC back end, but since I didn’t agree this was allowed, they made it free.

                                                                                                                                                                    I’m not a lawyer, but assuming RMS is accurately relaying the FSF’s lawyer’s opinion, it seems to be at odds with yours.

                                                                                                                                                                    1. 2

                                                                                                                                                                      When a lawyer makes a statement to their client, or to the public on behalf of their client, on what the law in a particular situation is, they cannot actually know what a court will eventually rule. This means only that the FSF’s lawyers, having the FSF’s interests in mind, believed it would be possible for them to argue that the ObjC frontend had to be GPL because it would be subversion of the licence’s intention to accept NeXT’s argument.

                                                                                                                                                                      But if the FSF wanted to stay in the land of copyright (which they were, until much more recently, very keen on doing), they have only one option: they would have to have argued that the ObjC front end is a derivative work of the main GCC distribution. (The GPLv2 is explicit that a ‘“work based on the Program” means either the Program or any derivative work under copyright law’.) This is very difficult for exactly the same reason a program compiled for Linux – even a complex assembly language program written only for Linux, invoking Linux system calls directly with their magic syscall numbers – is not a derivative work of Linux.

                                                                                                                                                                      If the FSF were more willing to accept that the GPL is a contract with wider-ranging obligations on its parties than a mere licensing of copyright under certain conditions, the ‘subterfuge’ argument might have held more water. That might have been a way it could have worked in court. But in the 1990s, in US law, that wasn’t how they were trying to sell it, as far as I know.

                                                                                                                                                                      (Disclaimer: I have not seen the relevant version of the GCC ObjC front end; it’s possible it could have been found to be a derivative work. Given that rms went to this roundabout argument about subterfuge, I think even he must have found that a doubtful argument.)

                                                                                                                                                                      1. 4

                                                                                                                                                                        (Disclaimer: I have not seen the relevant version of the GCC ObjC front end; it’s possible it could have been found to be a derivative work. Given that rms went to this roundabout argument about subterfuge, I think even he must have found that a doubtful argument.)

                                                                                                                                                                        IANAL but my understanding of the relevant argument, as it pops up in other contexts, is that:

                                                                                                                                                                        1. The ObjC frontend is linked against the GCC backend and they run in the same process while the Linux kernel runs as a separate process. (i.e. One has no IPC boundary and the other does)
                                                                                                                                                                        2. There is no alternative implementation exposing the GCC APIs that it could be linked against instead, while Linux tries to implement POSIX. (i.e. One cannot function without the GPLed code while the other can.)

                                                                                                                                                                        Those are the two standards I’ve seen used to draw lines like “It’s OK for Ark or File-Roller to link against libarchive, but the source to UnRAR must be built as a separate binary and exec‘d” or “It’s illegal to redistribute precompiled nVidia binary drivers, but you can run GOG.com games on Linux” when talking about derivative works.

                                                                                                                                                                        RMS’s argument makes no sense there.

                                                                                                                                                                        In the context of the e-mail, it’d be similar to how a compiled ffmpeg binary may or may not be required to be GPL depending on whether you build it with the GPLed bits enabled.

                                                                                                                                                                        If CLISP functions without readline and the APIs are intercompatible enough to be interchangeable at link time, then I don’t see how builds which don’t link against readline could be argued to be derived works.

                                                                                                                                                                      2. 1

                                                                                                                                                                        Yes, I read that part, it’s the part I was responding to. I’m saying I agree with the lawyer’s opinion on Objective-C, but I don’t think his reasoning would apply to CLISP. RMS is taking the lawyer’s opinion on the Objective-C situation and applying it to the CLISP situation, which I think is a misapplication.

                                                                                                                                                                        I thought this was a response to my comment at first, despite obviously not receiving a notification.

                                                                                                                                                                        1. 4

                                                                                                                                                                          I’ve mistakenly done that before too, and almost done it more than once; the rendering of an immediate sibling is similar enough to the rendering of a reply in my browser that I find it a little hard to distinguish the two.

                                                                                                                                                                      3. 3

                                                                                                                                                                        These sorts of discussions make me increasingly convinced of the value of the EUPL as a kind of non-viral project-wide copyleft license. If you distribute an EUPL-based project, even with modifications, then you must distribute that code plus modifications under that license - there’s no way to turn it proprietary again as with MIT or something similar. However, there’s no requirements on code that interacts with your project, uses its API, links to it, uses its syscalls, or extends it à la the Emacs example someone linked to in the comments.

                                                                                                                                                                        This legal trickery of forcing other projects to adopt your license is clever, but it feels like the FSF’s approach is far too zealous, and the waters have been muddied too much around what effects the GPL actually has.

                                                                                                                                                                      4. 1

                                                                                                                                                                        This is a problem I cannot ignore. If you can get away with this then any company can get away with it. The result would be to negate for practical purposes the GPL’s requirement that improvements be free. And that would deprive GNU software of a major source of improvements.

                                                                                                                                                                        Is that what you want?

                                                                                                                                                                        That’s badass, like a Morpheus quote.

                                                                                                                                                                        1. 11

                                                                                                                                                                          It’s also completely nonsensical. He wants copyright to be an infinitely powerful lever, but it isn’t.

                                                                                                                                                                          1. 10

                                                                                                                                                                            Really? That struck me as incredibly childish.

                                                                                                                                                                            RMS (seemingly) wrote a crap license, loophole.a and all, and he tries to pin the deficiency on … the messenger? Does he not realize this would be his fault? Bruno’s just trying to point this out

                                                                                                                                                                            1. 1

                                                                                                                                                                              GPL is the blue pill, 0BSD/ISC is the red pill.

                                                                                                                                                                              1. 7

                                                                                                                                                                                Except in reality each works better in a different setting. Strong copyleft is clearly better suited to keeping applications useful to less technical users from getting closed up and permissive licensing makes projects nobody would buy (like readline or crypto) more attractive to contribute to.

                                                                                                                                                                                And ideally all code would eventually lapse into public domain. In at most 15 years or so.

                                                                                                                                                                                Well, at least if you value commons over private property. If you don’t, then you’d obviously see this differently. But I personally believe that having strong commons leads to higher standard of living for most people and me specifically.

                                                                                                                                                                                1. 4

                                                                                                                                                                                  For me, my personal reasons for releasing code under non-copyleft free licenses, it’s neither about the commons nor private property.

                                                                                                                                                                                  It’s about wanting my giving to not be diluted by asking for something similar in return. (If I were giving necessities to the destitute, I’d try, if possible, to give first to the most in need, and for those equally in need, to the one who deserves it more unless I could afford to help both, but here, I’m talking about stuff that nobody needs, so I don’t feel a pressure to reward gooder people with priority service.)

                                                                                                                                                                                  I don’t call it generosity because what I do is done with my scraps, economically speaking. I simply release stuff I do for myself. If I thought one of them could change my life financially were I to sell it — i.e. not if I was already successful enough to not (need to) work anymore — I would do that instead.

                                                                                                                                                                                  That said, if I later realised I could sell it after releasing it for free w/o yet being that successful and it caused someone else to be successful, I wouldn’t resent anyone or regret my decision.

                                                                                                                                                                                  If someone takes advantage of my giving, I don’t see that as a problem. In fact, one might say that’s the point or even definition of giving: to benefit others. (True generosity is when it comes at your expense in a way that you feel the impact to some degree.)

                                                                                                                                                                                  I know copyleft people will argue that the thing you’re asking in return is to still benefit others, not yourself — or at least not only yourself, which is kinda different — but to me, it doesn’t matter. For my purposes, the reasons I give in the first place, I want it to be completely unencumbered.

                                                                                                                                                                                  It’s not ideological — I have no opinion on which is morally superior — nor some consequentialist calculation of what’ll serve the commons best (which may or may not be more moral for doing so), it’s simply for myself; if I give something away, I want to, ideally, truly give it away.

                                                                                                                                                                                  If a business used internal forks of libre software to run their services better than the competition in a way they didn’t deliver software to their customers and so had no need to give the source code away (even if it were copyleft), that act of giving had a negative impact on the business who was left behind by being less technologically capable or just not having heard of the software.

                                                                                                                                                                                  I don’t think people would suggest the idea of a clause whereby the first business should have told their competitors about this technological advancement as part of the license terms so that they can compete on a level playing field.

                                                                                                                                                                                  That’s how I feel about someone taking my MIT-licensed code to sell a modified binary-only fork of my software. The fact that some people benefited more than others isn’t my problem after a certain point. As long as they’re not doing anything morally impermissible in my worldview, or harming others (even unintentionally) in a way that wouldn’t be possible without my software which is trying to benefit others, I don’t feel the need to worry about those second-order or third-order effects.

                                                                                                                                                                                  Without me releasing my software, they wouldn’t have sold a fork with the code in that world either, they wouldn’t have sold a fork even without the code, so in that sense, my giving isn’t making things worse, it’s only making things better for some people more than others, but that’s the case with any act of giving.

                                                                                                                                                                                  1. 1

                                                                                                                                                                                    Sure, that’s what CC0 is for. I don’t ask kids I teach writing software to solemnly swear they will only ever release it under OSI-approved license either.

                                                                                                                                                                                    I am still happy about Immich being copyleft, though. Because that protects me (the beneficent) from development that might endanger my photo archival operation. It’s not just a nice gift. It’s a gift and a promise.

                                                                                                                                                                                    I think both ways of giving are noble, but they feel different to me.

                                                                                                                                                                                    1. 2

                                                                                                                                                                                      I tend to stick with MIT as a default for my code. Maybe one day, I’ll give it more thought and make a more informed decision.

                                                                                                                                                                                      For sure, I’d say even equally noble, but what do you mean by protecting you from development that might endanger your photo archival operation?

                                                                                                                                                                                      As a user of Immich, why would someone forking it and creating a non-libre version of it harm your use of the original software?

                                                                                                                                                                                      1. 1

                                                                                                                                                                                        They don’t normally fork. They normally try to convert some percentage of the open project user base via various schemes and the charitable people move on.

                                                                                                                                                                                        Eventually running heavily outdated version would not be practical. Right now, I am fairly confident I can get maybe 5-10 years out of it before having to move on because they seem fairly resolved.

                                                                                                                                                                                        I will be sending some money their way as soon as I actually move our library during holiday to increase the odds of the project actually surviving.

                                                                                                                                                                                        Same as I do with Godot (MIT), Blender (GPL) and KiCad (GPL).

                                                                                                                                                                                        1. 2

                                                                                                                                                                                          Are you talking about embrace, extend, extinguish? And/or other schemes?

                                                                                                                                                                                          Anyway, regardless of any schemes, there’s always the risk that enough people move away from a software that you prefer to use, whether for its license or otherwise, to trigger its demise.

                                                                                                                                                                                          I understand that a non-copyleft libre license makes it easy for opportunists to build commercial competitors with higher marketing and/or sales budgets, for example, but it’s just not something I worry about.

                                                                                                                                                                                          I don’t know, maybe I should; do you have any historical examples of, for example, MIT- or BSD-licensed software being forked into a closed-source product which the initial users mass migrated to, or got its own audience that grew bigger than the original? In either case, did the original open source project’s contributors move on?

                                                                                                                                                                                          1. 1

                                                                                                                                                                                            I think it’s mostly a case of original authors taking the project closed or retiring and new maintainers then taking it closed.

                                                                                                                                                                                            Although in the ownCloud case Karlitchek forked and kept NextCloud open, for instance.

                                                                                                                                                                                            I considered copyleft without CLA to mean “open and we promise to keep it that way” and permissive or CLA “open for now”.

                                                                                                                                                                                            1. 1

                                                                                                                                                                                              Ah, yeah, I hadn’t considered the owners closing it.

                                                                                                                                                                                              I was not aware of the ownCloud case. What were the others you were thinking of? Were they cases where the libre version didn’t get forked by the community?

                                                                                                                                                                                              1. 2

                                                                                                                                                                                                Even if they are forked, it can still mean migration. MySQL to Maria, Redis to Valkey, Gitea to Forgejo. Heck I still remember having to tell people to stop using OpenOffice and install LibreOffice years after the fork.

                                                                                                                                                                                                1. 1

                                                                                                                                                                                                  Fair enough.

                                                                                                                                                                                                  I take communities splintering, migrations, and other annoyances as the baseline cost of the ability to fork, and forks will always happen for a variety of reasons. I don’t particularly expend a lot of energy worrying about avoiding it,

                                                                                                                                                                                                  but then, I don’t know how much of an extra problem it is in practice when it comes to copyleft vs. non-copyleft licenses (at least, for other people), so I can understand the desire to do so.

                                                                                                                                                                                2. 1

                                                                                                                                                                                  I would’ve sided with the robots and the Matrix, for what it’s worth.

                                                                                                                                                                              2. 11

                                                                                                                                                                                There’s a lot of things I like about the macOS paradigm.

                                                                                                                                                                                • The menu bar is great. Did you know you can assign any keyboard shortcut to any menu item at the OS level, even if apps don’t build their own keybind customization setting UI?

                                                                                                                                                                                  It’s as close as you can get to the emacs philosophy of being able to bind any function to any keyboard shortcut. If you’re building a macOS app, put everything imaginable in menu items please!

                                                                                                                                                                                • GUI shortcuts use Cmd by default, almost exclusively. This leaves Ctrl free for escape codes in terminal emulators.

                                                                                                                                                                                • Apps that are self contained folders is so much better than the “installer can run arbitrary code” model. Yes apps can escape this sandbox and write anywhere, but most apps don’t do this meaning most apps uninstall by just deleting a folder. Package managers that install a spider web of unversioned shared libraries or package installers that run arbitrary code on install are way messier.

                                                                                                                                                                                But things I don’t like:

                                                                                                                                                                                • The “you’re holding it wrong” argument in the article justifying Cmd-Tab switching through apps not windows. Why can’t we have both? Why not one shortcut to cycle windows and one to cycle apps? It doesn’t sully the paradigm to provide that without relying on third parties.

                                                                                                                                                                                • Overlapping, non-full screen windows by default.

                                                                                                                                                                                  I’ve paired with so many people whose approach to window management leaves us looking at 15 lines of code when their setup could easily support 50–100 lines at their current resolution and font preferences. Please let’s get windows maximized by default, and maybe even put tiling back on the table.

                                                                                                                                                                                1. 7

                                                                                                                                                                                  Why not one shortcut to cycle windows and one to cycle apps?

                                                                                                                                                                                  Let me introduce you to the keyboard shortcut to cycle through windows: Cmd-`

                                                                                                                                                                                  1. 4

                                                                                                                                                                                    I think they may want one to cycle windows from all apps, and then one for apps.

                                                                                                                                                                                    1. 1

                                                                                                                                                                                      ⌃F4 and Shift⌃F4 cycle between all windows (of all applications) in the current desktop, but it’s not very ergonomic.

                                                                                                                                                                                      1. 1

                                                                                                                                                                                        Hrmmm. Unfortunately, they appear not to :( In my experimenting just now, it actually cycles between all active windows of all applications; i.e. it cycles through each application’s single foreground window, but not through any non-foreground windows.

                                                                                                                                                                                        1. 1

                                                                                                                                                                                          It works for all non-minimized windows for me. And see my other comment on how to change the shortcut to something more ergonomic.

                                                                                                                                                                                          1. 1

                                                                                                                                                                                            Maybe my test was a bit off. I tried with a new message window open in Mail.app, as well as the usual mailbox view. It’d only cycle thru whichever of those two I had last foregrounded; both unminimised. But that new message window might be a special type.

                                                                                                                                                                                    2. 2

                                                                                                                                                                                      As the article also points out, this is for switching within windows of the current app, not all windows on the system. The claim in the article is that this is actually a good paradigm, and my question is “why can’t you give me a first party keyboard shortcut for cycling through all windows as wel.”

                                                                                                                                                                                      1. 1

                                                                                                                                                                                        Understood. I don’t really see a use-case for this, but this functionality can be configured in Keyboard Shortcuts in System Settings.app, section “Keyboard”: Uncheck “Move focus to next window” and double-click the shortcut for “Move focus to active or next window” (^F4 by default) and press your desired shortcut.

                                                                                                                                                                                    3. 5

                                                                                                                                                                                      Cmd is great to leave Ctrl to terminal applications. But Option is not well thought. On Terminal.app, last time I checked, you couldn’t asign one Option as Meta, and leave the other as Option. This prevents the user from typing non-ASCII characters like á. I had to migrate to iTerm. Emacs.app also requires a Mac-specific one-liner on .emacs to deal with this issue.

                                                                                                                                                                                      1. 4

                                                                                                                                                                                        Terminal.app has a feature that lets you quickly toggle the behavior of the Option key between acting as Alt and its default behavior. It’s one of the only things Terminal.app does that I think is worth emulating

                                                                                                                                                                                        1. 2

                                                                                                                                                                                          :O

                                                                                                                                                                                          Oh my gosh, so it does! Command-Option-O toggles it, and a nice big indicator appears when you use it telling you which way around it is! That’s way cool.

                                                                                                                                                                                        2. 1

                                                                                                                                                                                          But Option is not well thought. On Terminal.app, last time I checked, you couldn’t asign one Option as Meta, and leave the other as Option. This prevents the user from typing non-ASCII characters like á.

                                                                                                                                                                                          I wrote a small app for myself for just this purpose back when I was trying out Emacs and didn’t want to switch to iTerm 2 for something so trivial, but also didn’t want to be forced to use the GUI for something so trivial when the console app worked the same for my purposes and I was used to a terminal workflow.

                                                                                                                                                                                          Here you go!

                                                                                                                                                                                          1. 1

                                                                                                                                                                                            You can set this on specific profiles. On Terminal.app settings > “Profiles” > select your profile > “Keyboard” > “Use Option as Meta key”

                                                                                                                                                                                            1. 3

                                                                                                                                                                                              But then, per @nextos:

                                                                                                                                                                                              This prevents the user from typing non-ASCII characters like á.

                                                                                                                                                                                              Terminal doesn’t let you switch only one Option over. iTerm2 does, which I was gonna say is “really nice” but actually is just a requirement for a lot of people!

                                                                                                                                                                                              1. 2

                                                                                                                                                                                                Oh, that makes sense! I didn’t understand at first

                                                                                                                                                                                          2. 3

                                                                                                                                                                                            Apps that are self contained folders is so much better than the “installer can run arbitrary code” model. Yes apps can escape this sandbox and write anywhere, but most apps don’t do this meaning most apps uninstall by just deleting a folder. Package managers that install a spider web of unversioned shared libraries or package installers that run arbitrary code on install are way messier.

                                                                                                                                                                                            Not often true IMHO. Apps write to ~/Library/Preferences and other folders all the time. And putting the app folder to the trash of course does not clean any of this.

                                                                                                                                                                                            1. 2

                                                                                                                                                                                              Settings are something I do want to persist except if I’m getting rid of them explicitly.

                                                                                                                                                                                            2. 3

                                                                                                                                                                                              The “you’re holding it wrong” argument in the article justifying Cmd-Tab switching through apps not windows. Why can’t we have both?

                                                                                                                                                                                              AltTab is a great third party extension that lets you tab through windows instead of applications. If you want you can set the short cut to something besides CMD+Tab. I prefer to override it though.

                                                                                                                                                                                              https://alt-tab-macos.netlify.app/

                                                                                                                                                                                            3. 3

                                                                                                                                                                                              In my opinion it’s a good idea to first understand how the system was designed to be used before decrying it as ill-conceived or making it something it isn’t using third-party window managers, app switchers, and so on.

                                                                                                                                                                                              Certainly it’s a good idea to understand the design intention/philosophy before criticizing. However, nothing in this article explained to me why it seemed like a good idea not to include window resizing shortcuts (as provided by, for example, Rectangle[0]) in the base OS. I’ve only been using it for a couple of months, and I already know it’ll be among the first apps I’ll install on any new machines hereafter.

                                                                                                                                                                                              I think that the implied reasoning is that the intended usage pattern is to only interact with a single app at once (see the “papers on a desk” metaphor). This is is so drastically foreign to my experience as a software developer (usually at least two windows open at once, often 3-5) as to make me wonder if I should finally try using this new-fangled Linux thing people keep talking about on my laptop as well as on servers…

                                                                                                                                                                                              [0] https://rectangleapp.com/

                                                                                                                                                                                              1. 5

                                                                                                                                                                                                I think that the implied reasoning is that the intended usage pattern is to only interact with a single app at once

                                                                                                                                                                                                I don’t know why I keep seeing people make this supposition. Anyone who attempts to explain macOS’ window management by supposing that it was intended to be used one app at a time knows nothing about Macs, and seems to me to be basing their guess on some caricature of a notion that macOS caters towards non-power-users.

                                                                                                                                                                                                The irony is, the same people before macOS changed the green button to be full-screen by default (i.e. without option held), back when it was called OS X, would have complained or questioned that the zoom button doesn’t maximise the way Windows does, but rather switches between two seemingly arbitrary sizes.

                                                                                                                                                                                                1. 1

                                                                                                                                                                                                  Yep, I will freely admit that I know next-to-nothing about the design intention/philosophy of Macs (although I’d still claim that I know enough about using them to be pretty competent, even if that competence is in spite of my ignorance of the underlying design philosophies).

                                                                                                                                                                                                  I’ve now read both an article and a comment that don’t explain the design philosophy motivating the absence of window-tiling functionality. Could you explain that reasoning to me, rather than agreeing with me that I don’t understand it?

                                                                                                                                                                                                  1. 2

                                                                                                                                                                                                    I don’t claim to be enough of an authority on the design philosophy of macOS to motivate its absence of window tiling with any eloquence,

                                                                                                                                                                                                    as much of it is implicit knowledge from things I devoured years ago as a teenager moving from Windows to Mac OS X Tiger at the time, who immediately felt much more at home on it and got really into online Mac communities (though not as much of an active participant).

                                                                                                                                                                                                    However, I can say confidently that macOS wasn’t intended to be used, at least in its standard mode of operation, one app at a time like iOS on a phone. If anything, you could make that argument for Windows much more than macOS, and their respective maximize/zoom behaviours are testament to that.

                                                                                                                                                                                                    Yes, Windows has added some tiling functionality and other enhancements, but for a long time, maximising windows was the standard way most people used most apps on Windows. That’s not the case on macOS.

                                                                                                                                                                                                    And tiling is not the only way of working with multiple apps at a time. Apart from maybe when only using the browser or watching movies or the like, my impression is that it’s more common standard practice to have overlapping windows on macOS than Windows, and use Exposé or Cmd+Tab or just click windows peeking from underneath the active one to switch between apps and windows.

                                                                                                                                                                                                    In fact, I have Terminal windows right now peeking out from behind my browser (and other windows, too), and I instantly notice when the builds I’m constantly running have finished while I do other stuff. Why would I make it take up a whole portion of the screen and relegate my browser window to an edge or half of a screen instead of taking up 70%? (Yeah, yeah, notifications, I don’t care.)

                                                                                                                                                                                                    I say that as someone who’s been experimenting with tiling window managers on X, finds them very interesting and can definitely see their appeal, even prefer them in many ways and still use them as my #1 choice on my X-based machines despite not using tilers on macOS (I don’t use Wayland for uninteresting reasons.)

                                                                                                                                                                                                    Believe me, I have my gripes with macOS’ window management too (e.g. while I like Cmd+Tab switching between applications not windows, I wish it’d only raise the frontmost window of the selected app instead of all its windows, which would make the stacking work even better).

                                                                                                                                                                                                    I just find this particular supposition that macOS is intended to be used one app at a time easily disproven even without much knowledge of macOS design philosophy, and rooted in a caricature of ‘simple’ Mac users (and the irony of one of the simple disproofs being another thing that the same people would probably be confused by and notice, i.e. the difference in window zoom behaviour from Windows).

                                                                                                                                                                                                    So to repeat, I’m no expert, but if I were to answer your question with one part of its philosophy, it’d be stack your windows. It’s certainly not about one app at a time.

                                                                                                                                                                                                    1. 2

                                                                                                                                                                                                      And tiling is not the only way of working with multiple apps at a time.[…] In fact, I have Terminal windows right now peeking out from behind my browser (and other windows, too), and I instantly notice when the builds I’m constantly running have finished while I do other stuff. Why would I make it take up a whole portion of the screen and relegate my browser window to an edge or half of a screen instead of taking up 70%? (Yeah, yeah, notifications, I don’t care.)

                                                                                                                                                                                                      I know I’m opening myself up to an accusation of committing the No True Scotsman fallacy here, but that’s…not using multiple apps at a time. That’s using one app, setting off a long-running job, then “backgrounding” it to work with another app until you can usefully give attention to the first one again. For which case, yep, you absolutely want it to take up the minimal-possible-space to provide you with that the notification (lower-case n - not necessarily through System Notifications) that it’s ready for your attention again. What I’m talking about is when attention and input are switching between two or more apps (IDE/Terminal/Browser, for instance) multiple times in a minute, perhaps once every few seconds. In which setup, I (subjectively!) think it’s reasonable to want each of the active apps’ windows to a) remain static (not resizing repeatedly), and b) all be visible at once (not overlapping, thus not occluding the “next” area of space that’s going to get attention).

                                                                                                                                                                                                      Sure, the distinction between the two modes is a matter of degree - in this mode, I, too, am arguably still “backgrounding” each app that I’m not actively interacting with, though for seconds rather than “until I am called back to it in minutes-or-longer” - but nonetheless an important one, I think.

                                                                                                                                                                                                      That said, that doesn’t detract from your core argument - that the lack of a tiling manager in MacOS does not imply that the Mac philosophy opposes use of multiple apps at once.

                                                                                                                                                                                                      1. 3

                                                                                                                                                                                                        The great thing about stacking window managers is that they don’t force you into one paradigm or the other, you can always align your windows in a tiled manner or not. The downside is having to manage that. Tiled window managers take away the low level task of managing your windows manually, but you lose the control. Classic low level paradigm vs. high level paradigm.

                                                                                                                                                                                                        I guess that’s what this crop of modern stacking window managers with easy tiling try to do, combine (the most important, least, middle, or a combination of) 80% of what matters in both worlds (most uses of the term, “best of both worlds” should really be that).

                                                                                                                                                                                                        I’d say it a bit stronger, though; it’s not just that it doesn’t oppose the use of humans multitasking w/ several apps, it generally encourages it, even with (manual) tiling. The point about the zoom button’s behaviour still applies to those who, for example, have a browser window on one side — because most web content is tall, not wide — and a terminal on the other.

                                                                                                                                                                                                        People have been doing this for a long time, especially on macOS; I only gave a stacking example so that it’s clear you don’t need to be tiling for this to be the case, and that tiling window managers don’t hold a monopoly on multitasking (which is the implication I interpreted from the start of this conversation). What we call tiling window managers simply formalised one particular window arrangement/workflow into a paradigm by automating the process to free up brain cycles.

                                                                                                                                                                                                        I’m not even saying the complaint about macOS being slow to add tiling shortcuts is invalid. It’s a fair complaint. It’s just not because macOS discourages multitasking, multitasking has nothing to do with it.

                                                                                                                                                                                                      2. 1

                                                                                                                                                                                                        I appreciate your detailed response, thank you! Seems I’ve hit on a particular nerve (no judgement or denigration implied! We all have things that particularly trigger us) on that particular supposition, and I’m sorry for making that mistake.

                                                                                                                                                                                                      3. 1

                                                                                                                                                                                                        I mean, it’s like you’re asking why most jeans don’t have cargo pockets. The notable absence!

                                                                                                                                                                                                        I wager that most Mac users do not need or want tiling window stuff, let alone keyboard shortcuts (yuck). Three-finger drag is fine. The resize handles are fine (no 1px nonsense). There’s some new tiling stuff under the green button, but I bet most won’t even use it. I don’t even use the built-in tiling on Windows. Is anyone still using Cascade windows ? Window management is just not that hard.

                                                                                                                                                                                                        Look, I’m pretty sure I’ve paid for Moom.app years ago—it’s just that tiling’s not that important to most anyone

                                                                                                                                                                                                    2. 2

                                                                                                                                                                                                      However, nothing in this article explained to me why it seemed like a good idea not to include window resizing shortcuts (as provided by, for example, Rectangle[0]) in the base OS. I’ve only been using it for a couple of months, and I already know it’ll be among the first apps I’ll install on any new machines hereafter.

                                                                                                                                                                                                      FYI it’s finally been added natively in macOS Sequoia just a few weeks ago :)

                                                                                                                                                                                                      https://support.apple.com/fr-fr/guide/mac-help/mchlef287e5d/mac

                                                                                                                                                                                                      It’s less powerful than Rectangle, but does everything I used Rectangle for!

                                                                                                                                                                                                      1. 2

                                                                                                                                                                                                        An annoying thing about it is that when you resize a window to a portion of the screen, it doesn’t use all the available space but leaves a margin of a couple of pixels around it. A small thing but enough to make me keep using Rectangle.

                                                                                                                                                                                                        1. 3

                                                                                                                                                                                                          I also disliked that, but luckily it can be configured in the Desktop & Dock settings.

                                                                                                                                                                                                          1. 1

                                                                                                                                                                                                            Thanks, that’s much better!

                                                                                                                                                                                                        2. 1

                                                                                                                                                                                                          I just saw that announcement today, and thought of this discussion!