1. 7

    I don’t just like it, I love it. It’s pretty much been that way since I started, maybe 16 years ago. I don’t just enjoy the act of coding itself, I enjoy almost everything about the process of building. I like writing docs. I like researching obscure algorithms, especially when I know it’s the right algorithm. I like writing tests, especially when they increase my confidence in the correctness of changes I make to the code later. I like writing prototypes, and then molding them into something comprehensible.

    At $work, I tend to generalize. In my free time, I tend to specialize. This gives a healthy balance and let’s things stay fresh. In my free time, I tend to juggle a variety of different project ideas in my area of specialization, which is just another form of balance. (This is all retrospective. I didn’t set out to do things this way; it just happened.)

    Sometimes I am too tired to code or busy with other things when I get home from work. Mostly though, I find the time, because I love it.

    However, I feel an immense amount of pressure to pretend that I do enjoy coding because there’s a sentiment that people who don’t enjoy it are intrinsically worse at coding that people who do.

    You could say this about virtually anything. There’s always going to be something that society or our culture values irrationally, or attempts to explain away with surface level bullplop. Hell, some people in this thread chose to pontificate on this very point, and then went on to create their own little bits of irrationality to feed into our culture. In most cases, they’re just heuristics, and people take them too far. You do you. Find what works.

    1. 11

      why to people have the need to use a framework for everything, like the BDD testing frameworks in this article. i really don’t see the value of it. it’s just another dependency to carry around, and i can’t just read and understand what is happening.

      what is gained by writing:

      Expect(resp.StatusCode).To(Equal(http.StatusOK))
      

      instead of

      if resp.StatusCode != http.StatusOK { 
          t.Fail() 
      }
      
      1. 11

        I don’t use that particular testing framework, but the thing I’d expect to gain by using it is better test failure messages. I use testify at work for almost precisely that reason. require.Equal(t, valueA, valueB) provides a lot of value, for example. I tried not to use any additional test helpers in the beginning, probably because we have similar sensibilities. But writing good tests that also have good messages when they fail got pretty old pretty fast.

        1. 3

          ok, i can see that good messages may help, though i’d still rather use t.Fatal/Fatalf/Error/Errorf, maybe paired with a custom type implementing error (admitting that it’s a bit more to type) if a custom DSL is the alternative :)

          testify looks interesting though!

          1. 4

            testify is nice because it isn’t really a framework, unless maybe you start using its “suite” functionality, which is admittedly pretty light weight. But the rest of the library drops right into the normal Go unit testing harness, which I like.

            I did try your methods for a while, but it was just untenable. I eventually just stopped writing good failure messages, which I just regretted later when trying to debug test failures. :-)

            testify is a nice middle ground that doesn’t force you to play by their rules, but adds a lot of nice conveniences.

        2. 6

          The former probably gives a much better failure message (e.g. something like “expected value ‘200’ but got value ‘500’”, rather than “assertion failed”).

          That’s obviously not inherent to the complicated testing DSL, though. In general, I’m a fan of more expressive assert statements that can give better indications of what went wrong; I’m not a big fan of heavyweight testing frameworks or assertion DSLs because, like you, I generally find they badly obfuscate what’s actually going on in the test code.

          1. 4

            yeah, with the caveats listed by others, I sort of thing this is a particularly egregious example of strange library usage/design. in theory, anyone (read: not just engineers) is supposed to be able to write a BDD spec. However, for that to be possible, it should be written in natural language. Behat specs are a good example of this: http://behat.org/en/latest/. But this one is just a DSL, which misses the point I think…

            1. 3

              However, for that to be possible, it should be written in natural language. Behat specs are a good example of this: http://behat.org/en/latest/. But this one is just a DSL, which misses the point I think…

              I’d say that the thing behat does is a real DSL (like, with a parser and stuff). The library from the article just has fancy named functions which are a bit a black box to me.

              Just a thought: One could maybe write a compiler for a behat-like language which generates stdlib Go-tests, using type information found in the tested package, instead of using interface{} and reflect. That’d be a bit of work though ;)

          1. 8

            I liked this article and appreciate the examples. But I was left wondering: under what conditions, if any, should I not follow the advice in this article?

            1. 8

              I think it’s all good as rules of thumb, but I see two potential downsides.

              First, there’s a key phrase that I think indicates some limitations:

              It’s not a general purpose BMP library. It only supports 24-bit true color, ignoring most BMP features such as palettes.

              As you start adding features, this design approach may rapidly become intractable. It’s most suitable for libraries that are minimalist in the other sense, and unfortunately, we live in an extremely complicated world where such libraries often aren’t actually useful. It’s all great ideals, but if taken as absolute gospel, I suspect it will strongly interfere with getting stuff done.

              Second, for instance, I don’t like how the author has bmp_size return 0 in the case of an error. I know it’s a C-ism that’s very difficult to work around in C, but that’s a totally valid size to pass to calloc, which may return a totally valid non-NULL pointer, and bmp_init may then scribble over totally arbitrary memory. (Or it might segfault. “Might” is the operative word here. When a segfault is the best possible outcome, something has gone badly, badly wrong.) This approach forces the caller to check, which is unfriendly and error-prone. Of course, I don’t actually know a better way in C to handle it; returning a negative signed value won’t work because of conversion rules (though trying to allocate almost SIZE_MAX bytes of memory will probably fail).

              Similarly,

              …the library returns the power of two number of uint32_t it needs to allocate….

              Why? The caller will definitely forget to 1ULL << z eventually, and then they’ll have far, far too small a table for the number of elements they want to put in it (which, by the way, the library also has no way to signal). I guess it saves the library from an “error state”, but at the cost of obfuscating its own interface and pushing the check for that error state (which, of course, didn’t actually go away) into the application where it will need to be written many times and thus have many opportunities to be done incorrectly.

              …I guess I’m complaining that C isn’t Rust here. =/ But in both these cases, I wonder if a less “minimalist” interface might have been less error-prone to actually use, and (hopefully) uses of a library greatly outnumber implementations thereof, and thus should be a preferable target for minimization.

              1. 3

                Guideline #2 (No dynamic memory allocations) can have a significant effect on error detection.

                If the library allocates memory then it can use structure marking to detect use after free, uninitialized variables, and other programming errors.

                Here is a quick sketch of a version that uses structure marking. I added bmp_try_bytes so that the resulting bitmap can be written to a file.

                enum bmp_error_code //definition omitted for brevity  
                struct bmp_data; //incomplete type  
                bmp_error_code bmp_try_create(long width, long height, struct bmp_data **result);  
                bmp_error_code bmp_try_set(struct bmp_data *, long x, long y, unsigned long color);  
                bmp_error_code bmp_try_get(const struct bmp_data *, long x, long y, unsigned long *color);  
                bmp_error_code bmp_try_free(struct bmp_data **);
                bmp_error_code bmp_try_get_bytes(const struct bmp_data *, size_t *bytes, void **bytes);
                
              1. 10

                I support workers of Google to unionize. Naver, the #1 tech company in South Korea, recently unionized.

                1. 3

                  Working in large tech companies can be depressing enough even without compensation determined by union seniority.

                  1. 1

                    This kind of outcome entirely depends on how you unionize.

                    1. 4

                      In theory, sure. In practice tho it’s really hard to find examples of strong unions without formalized payscale.

                      1. 1

                        FYI, Naver union is one such strong union without formalized payscale.

                    2. -1

                      are you american?

                      1. 2

                        No. Why?

                    3. 1

                      They would definitely benefit from a union.

                      But they have stronger challenges in this process then most other employees around the west.

                      First the individualistic culture/propaganda they have been fed for years could prevent them from trading the promise of individual benefits for the reality of shared ones.

                      But most relevant is the distribution of the company around the world. There are different legal and economical environments out there and it’s likely that several different unions will compete for Google employees, each focused on the local issues and interests people see most.

                      OTOH Google guys are pretty smart, they could learn how to think globally and how to balance long term benefits with short term local ones more easily than other workers.

                      1. 3

                        First the individualistic culture/propaganda they have been fed for years could prevent them from trading the promise of individual benefits for the reality of shared ones.

                        I would say this is widespread in the tech community. This is not just Google or the USA. The same situation is very common here in Europe. That’s why ideologies like libertarianism or identity politics are more easily spread in the tech community.

                        That said, I believe people like the Tech Worker Alliance are getting it right in the way they communicate: they disguise the unionist message as something else, avoiding “problematic words” and basically working around the prejudice of the average programmer. I believe this is the key for a new unionist movement around the West, because the old one cannot be revived and it’s tainted by its own problems and by years of anti-unionism.

                        1. 0

                          First the individualistic culture/propaganda they have been fed for years could prevent them from trading the promise of individual benefits for the reality of shared ones.

                          The xkcd “sheeple” comic was given to the contrarian in this thread, but it applies to this too. Your hubris is just less overt and more civilized, but almost as off-putting from my perspective.

                          1. 3

                            Your hubris…

                            Can you please elaborate?

                            I just noticed two issues that a union in Google would face: a cultural bias and the legislative/economic complexity due to the multinational nature of the company.

                            The cultural bias against the unions is well known in the USA, mainly because of the country narrative is based on the competition and on the solo hero/entrepreneur. In other states the country narrative value cooperation a lot more, for example in families (that are large group of people), in tribes, in church and so on…
                            This is an historical and sociological observation that could be false, but doesn’t look like hubris.

                            The multinational observation is also self evident: in different states around the world, laws are different, cultures are different, economical issues are different and so on… the tendency to only focus in the local space could be exploited by the ownership of the company to divide and conquer the employees.

                            Finally, while I do not like the Google’s corporate culture that I’ve found among engineers, I acknowledge they hire very smart people and what happened with Project Maven show how much they care about their work.

                            So I think they have an unique chance to overcome these difficulties.

                            The fact is that in a company that has built an internal narrative based on knowledge and intelligence, now face the fact that the employees hold collectively more knowledge and intelligence than the ownership by several orders of magnitude.

                            If knowledge is power, in Google, the employees are more powerful than the ownership.

                            They still call the ownership as “leadership”, but they will soon realize they are the true leaders there.

                            1. -2

                              Your hubris is in the implication that individualism is not a reasonable stance to hold. Why would anyone knowingly choose “promises” over reality?

                              I’m not interested in having a long drawn conversation with you on this topic. I’m just saying, as someone who disagrees with you, your comment is deserving of the “sheeple” xkcd. You might want to reconsider your approach.

                              1. -1

                                Your hubris is …

                                I’m not interested in having a long drawn conversation with you …

                                your comment is deserving of the “sheeple” xkcd …

                                You might want to reconsider your approach

                                Yo, post something worthwhile or don’t post at all.

                      1. 3

                        Note this post was from 2015. It’s somewhat wrong: signalfd isn’t useless at all, and the criticisms boil down to:

                        So you have to be very careful to reset any masked signals before starting a child process, and unfortunately you need to do this yourself

                        … which, sure, is potentially annoying, but does not render the call useless. Also:

                        There’s another problem with masking signals, which is that standard UNIX signals are permitted to coalesce when they queue

                        This isn’t a problem with masking signals, it’s a general problem (I’m not even sure if “problem” might be too strong a word regardless). Signals can coalesce even if not masked. There are cases where signals aren’t supposed to coalesce (according to POSIX, by my interpretation) and which Linux doesn’t handle correctly, but I’m not sure if other kernels do any better. But in general, you aren’t supposed to care if you receive some signal once or twice or more.

                        1. 2

                          But in general, you aren’t supposed to care if you receive some signal once or twice or more.

                          The OP talks about why they believe this is important, because some signals carry additional information (in the case of SIGCHLD). Can you say how one should not care about that?

                          (I only have a surface level understanding of signals and I’m not knowledgeable about all of the dark corners. I’m mostly just trying to understand your critique here.)

                          1. 3

                            Well, I’m not sure but the case of SIGCHLD may be one that POSIX technically implies cannot be coalesced. However, even if it can be coalesced, you can generally retrieve the same information as was sent with the signal via other means - in this case, the wait() family of system calls. You can use waitpid function with the NOHANG option to keep checking for terminated children, and you can (and should) do this each time you get a SIGCHLD, until it returns ECHILD.

                            1. 2

                              Incidentally, what POSIX does say (from 2.4.1 Signal Generation and Delivery):

                              The determination of which action is taken in response to a signal is made at the time the signal is delivered, allowing for any changes since the time of generation. This determination is independent of the means by which the signal was originally generated. If a subsequent occurrence of a pending signal is generated, it is implementation-defined as to whether the signal is delivered or accepted more than once in circumstances other than those in which queuing is required

                              Specific cases which require queuing, which I could find, are:

                              Per-process timers may be created that notify the process of timer expirations by queuing a realtime extended signal.

                              In 2.4.2:

                              When a signal is generated by the sigqueue() function or any signal-generating function that supports the specification of an application-defined value, the signal shall be marked pending and, if the SA_SIGINFO flag is set for that signal, the signal shall be queued to the process along with the application-specified signal value. Multiple occurrences of signals so generated are queued in FIFO order. It is unspecified whether signals so generated are queued when the SA_SIGINFO flag is not set for that signal.

                              The rationale section for the timer_create() states:

                              The specified timer facilities may deliver realtime signals (that is, queued signals) on implementations that support this option. Since realtime applications cannot afford to lose notifications of asynchronous events, like timer expirations or asynchronous I/O completions, it must be possible to ensure that sufficient resources exist to deliver the signal when the event occurs.

                              So, this implies that aynchronous I/O completion as well as timer timeout must be able to queue a signal without failing. That’s about the only specific mentions of this I can find. Note that asynchronous I/O uses a “struct sigevent” argument just as timer_create() does. Note also the implication that non-realtime signals (of which SIGCHLD is one) do not need to support queuing.

                              About SIGCHLD, in 2.4.3 Signal Actions:

                              When a process stops, a SIGCHLD signal shall be generated for its parent process, unless the parent process has set the SA_NOCLDSTOP flag.

                              Here it says “generated” rather than “queued”, implying that SIGCHLD can be coalesced.

                              1. 1

                                until it returns ECHILD.

                                Sorry, until it returns 0.

                                1. 0

                                  Interesting. I had a similar thought (with respect to wait) when reading the OP, but wasn’t sure. It would be a nice follow up question for the author. Maybe if you know which child was terminated, you can be more precise with which child you attempt to reap? Otherwise, if you have to try many of them, that might have performance implications?

                                  1. 2

                                    Maybe if you know which child was terminated, you can be more precise with which child you attempt to reap? Otherwise, if you have to try many of them, that might have performance implications?

                                    You should just set the pid to -1 and let the system tell you which child terminated. I don’t think there are any serious performance implications; the main one is probably due to the extra system call (because you do one waitpid call for each terminated child, and another one to find out that there are no more terminated children). In any case, this wouldn’t be a problem that’s unique to using signalfd - as I mentioned (and as OP article admits in an edit at the end) signals can be coalesced even if they’re not masked.

                            1. 5

                              This is neat! I’ve been looking for a man page generator. I also use asciidoc and have had toolchain issues with it, particularly on macOS.

                              I perused the source code a bit since I was curious about the combination of “no dependencies” and “UTF-8 support.” What, exactly, do you mean by UTF-8 support?

                              I see you hand rolled your own UTF-8 handling, but what I don’t quite understand is why you did it in the first place. What I mean is that your parser only seems to care about ASCII, and you never actually take advantage of UTF-8 itself with one obvious exception: if the data you read isn’t valid UTF-8, then your parser sensibly gives up. Is there some other aspect of UTF-8 you’re using? Perhaps I’ve skimmed your code too quickly and missed it.

                              I do see that you’re using the various POSIX char functions such as isdigit and isalnum, but those operate based on POSIX locale support, and aren’t, as far as I know, aware of the various Unicode definitions of those functions. Moreover, the documentation for those functions states that it is UB to pass a value that cannot be represented in an unsigned char.

                              I’m not a C expert, so I could be missing something pretty basic!

                              1. 3

                                Hey, thanks for your feedback!

                                I perused the source code a bit since I was curious about the combination of “no dependencies” and “UTF-8 support.” What, exactly, do you mean by UTF-8 support?

                                Yeah, supporting it wasn’t too hard. I probably don’t have to explicitly handle it, but I prefer to enforce all input files must be UTF-8 and all output files must be UTF-8 rather than leave wiggle room. One intentional design decision of scdoc is that it is very strict - it will error out if you try to write #header instead of # header, for example. Enforcing UTF-8 is another form of strictness that ensures all scdoc files have a baseline of sanity.

                                I do see that you’re using the various POSIX char functions such as isdigit and isalnum, but those operate based on POSIX locale support, and aren’t, as far as I know, aware of the various Unicode definitions of those functions. Moreover, the documentation for those functions states that it is UB to pass a value that cannot be represented in an unsigned char.

                                I should probably enforce that characters I feed into this are <0x80. Good catch, filed a bug:https://todo.sr.ht/~sircmpwn/scdoc/13

                                1. 2

                                  Ah, yeah, that makes sense. Starting with strict validation on UTF-8 is smart. :-)

                              1. 9

                                pass. I don’t understand the syncing issues. If you write code and use git, then syncing passwords works exactly the same as syncing code. I even have it working on my phone.

                                1. 3

                                  how do you add or update passwords in your phone or ipad? i travel and i don’t always have access to a computer.

                                  1. 3

                                    That isn’t actually in my normal usage pattern, but I just tried it and it works. The app lets me add entries to my pass database, and then I can push to my git remote through the GUI. What happens if a merge conflict arises isn’t clear though. :-)

                                  2. 2

                                    I also use pass, but only have it locally on one machine. Until now I’ve been relying on Chrome’s password sync feature if I wanted a password on my phone too.

                                    My setup isn’t ideal, so if you don’t mind elaborating on yours, please would you give more details?

                                    1. 4

                                      Oh sure! I have an Android phone. All I did was install OpenKeychain and the unofficial Android Password Store app. I then imported my key into OpenKeychain and setup Password Store on my phone to use it. All Password Store needs is to pull from your git repo containing passwords. It only does this when you tell it to, so it keeps a local copy on your phone and you can sync whenever.

                                      1. 3

                                        Fantastic info; thank you very much. :-)

                                  1. 75

                                    Capitalism is killing us in a very literal sense by destroying our habitat at an ever accelerating rate. The fundamental idea of needing growth and having to constantly invent new things to peddle leads to ever more disposable products, that are replaced for the sake of being replaced. There’s been very little actual innovation happening in the phone space. The vendors are intentionally building devices using the planned obsolescence model to force the upgrade cycle.

                                    The cancer of consumerism affects pretty much every aspect of society, we’ve clear cut unique rain forests and destroyed millions of species we haven’t even documented so that we can make palm oil. A product that causes cancer, but that’s fractionally cheaper than other kinds of oil. We’ve created a garbage patch the size of a continent in the ocean. We’re poisoning the land with fracking. The list is endless, and it all comes down to the American ethos that making money is a sacred right that trumps all other concerns.

                                    1. 22

                                      Capitalism is killing us in a very literal sense by destroying our habitat at an ever accelerating rate.

                                      The cancer of consumerism affects pretty much every aspect of society, we’ve clear cut unique rain forests and destroyed millions of species we haven’t even documented so that we can make palm oil.

                                      One can get into a big debate about this, but the concept of externalities has existed for a long time and specifically addresses these concerns. Products do not cost what they should when taken their less tangible environment impact into account. It’s somewhat up to the reader to decide if the inability of society to take those into account is capitalism’s fault, or just human nature, or something else. I live in a country that leans much more socialist than the US but is unequivocally a capitalist country and they do a better job of managing these externalities. And China is not really capitalistic in the same way the US is but is a pretty significant polluter.

                                      1. 5

                                        Indeed, it’s not the fault of the economic system (if you think Capitalistic societies are wasteful, take a look at the waste and inefficiency of industry under the USSR). If externalities are correctly accounted for, or to be safe, even over-accounted for by means of taxation or otherwise, the market will work itself out. If the environmental cost means the new iPhone costs $2000 in real costs, Apple will work to reduce environmental cost in order to make an affordable phone again and everyone wins. And if they don’t, another company will figure it out instead and Apple will lose.

                                        Currently, there is basically no accounting for these externalities, and in some cases (although afaik not related to smart phones), there are subsidies and price-ceiling regulations and subsidies that actually decreases the cost of some externalities artificially and are worse for the environment than no government intervention at all.

                                        The easy example of this is California State water subsidies for farmers. Artificially cheap water for farmers means they grow water-guzzling crops that are not otherwise efficient to grow in arid parts of the state, and cause environmental damage and water shortage to normal consumers. Can you imagine your local government asking you to take shorter showers and not wash your car, when farmers are paying 94% less than you to grow crops that could much more efficiently be grown in other parts of the country? That’s what happens in California.

                                        Step 1 and 2 are to get rid of the current subsidies and regulations that aggravate externalities and impose new regulation/taxes that help account for externalities.

                                        1. 2

                                          I have talked to a factory owner in china. He said China is more capitalist than the USA. He said China prioritizes capital over social concerns.

                                          1. 1

                                            Ok? I can talk to lots of people with lots of opinions. That doesn’t make it true.

                                            1. 1

                                              It’s just impressive that a capitalist would say. If China was even remotely communist, don’t you find it interesting that most capitalists who made deals with China seem ok helping ‘the enemy’ become the second largest economy in the world? I prefer to believe the simpler possibility that China is pretty darn capitalist itself.

                                              1. 2

                                                I did not say China was not capitalist, I said it’s not in the same way as the US. There is a lot more state involvement in China.

                                                1. 2

                                                  Is your claim then that state involvement means you have more pollution? Maybe I’m confused by what you were trying to get at, sorry :-/

                                                  1. 2

                                                    No, I was pointing out that different countries are doing capitalism differently and some of them are better at dealing with externalities and some of them are worse. With the overall point being that capitalism might be the wrong scapegoat.

                                          1. 7

                                            I think the consumer could be blamed more than capitalism, the companies make what sells, the consumers are individuals who buy products that hurt the environment, I think that it is changing though as people become more aware of these issues, they buy more environmentally friendly products.

                                            1. 30

                                              You’re blaming the consumer? I’d really recommend watching Century of the Self. Advertising has a massive impact and the mass of humans are being fed this desire for all the things we consume.

                                              I mean, this really delves into the deeper question of self-awareness, agency and free will, but I really don’t think most human beings are even remotely aware.

                                              Engineers, people on Lobster, et. al do really want standard devices. Fuck ARM. Give me a god damn mobile platform. Microsoft for the love of god, just publish your unlock key for your dead phone line so we can have at least one line of devices with UEFI+ARM. Device tree can go die in a fire.

                                              The Linux-style revolution of the 2000s (among developers) isn’t happening on mobile because every device is just too damn different. The average consumer could care less. Most people like to buy new things, and we’re been indoctrinated to that point. Retailers and manufactures have focus groups geared right at delivering the dopamine rush.

                                              I personally hate buying things. When my mobile stopped charging yesterday and the back broke again, I thought about changing it out. I’ve replaced the back twice already and the camera has spots on the sensor under the lenses.

                                              I was able to get it charging when I got home on a high amp USB port, so instead I just ordered yet another back and a new camera (I thought it’d be a bitch to get out, but a few YouTube videos show I was looking at the ribbon wrong and it’s actually pretty easy to replace).

                                              I feel bad when I buy things, but it took a lot of work to get to that point. I’ve sold or given away most of my things multiple times to go backpacking, I run ad block .. I mean if everyone did what I’d did, my life wouldn’t be sustainable. :-P

                                              We are in a really solidly locked paradigm and I don’t think it can simply shift. If you believe the authors of The Dictators Handbook, we literally have to run our of resources before the general public and really push for dramatically different changes.

                                              We really need more commitment to open standards mobile devices. The Ubuntu Edge could have been a game changer, or even the Fairphone. The Edge never got funded and the Fairphone can’t even keep parts sourced for their older models.

                                              We need a combination of people’s attitudes + engineers working on OSS alternatives, and I don’t see either happening any time soon.

                                              Edit: I forgot to mention, Postmarket OS is making huge strides into making older cellphones useful and I hope we see more of that too.

                                              1. 7

                                                I second the recommendation for The Century of the Self. That movie offers a life-changing change of perspective. The other documentaries by Curtis are also great and well worth the time.

                                                1. 3

                                                  Century of the Self was a real eye opener. Curtis’s latest documentary, HyperNormalisation, also offers very interesting perspectives.

                                                2. 26

                                                  Capitalism, by it’s very nature, drives companies to not be satisfied with what already sells. Companies are constantly looking to create new markets and products, and that includes creating demand.

                                                  IOW, consumers aren’t fixed actors who buy what they need; they are acted upon to create an ever increasing number of needs.

                                                  There are too many examples of this dynamic to bother listing.

                                                  1. 12

                                                    It’s also very difficult for the consumer to tell exactly how destructive a particular product is. The only price we pay is the sticker price. Unless you really want to put a lot of time into research it is hard to tell which product is better for the environment.

                                                    1. 14

                                                      It’s ridiculous to expect everyone to be an expert on every supply chain in the world, starting right from the mines and energy production all the way to the store shelf. That’s effectively what you are requiring.

                                                      I’m saying this as a very conscious consumer. I care about my carbon footprint, I don’t buy palm oil, I limit plastic consumption, I limit my consumption overall, but it’s all a drop in the ocean and changes nothing. There are still hundreds of compounds in the everyday items I buy whose provenance I know nothing about and which could be even more destructive. Not to mention that manufacturers really don’t want you to know, it’s simply not in their interest.

                                                      You’re creating an impossible task and setting people up to fail. It is not the answer.

                                                      1. 2

                                                        “It’s ridiculous to expect everyone to be an expert on every supply chain in the world, starting right from the mines and energy production all the way to the store shelf. That’s effectively what you are requiring.”

                                                        I don’t think it is what they’re requiring and it’s much easier than you describe. Here’s a few options:

                                                        1. People who are really concerned about this at a level demanding much sacrifice to avoid damaging the environment should automatically avoid buying anything they can’t provably trust by default. The Amish are a decent example that avoids a lot of modern stuff due to commitment to beliefs.

                                                        2. There’s groups that try to keep track of corporate abuse, environmental actions, and so on of various companies. They maintain good and bad lists. More people that supposedly care can both use them and join them in maintaining that data. It would be split among many people to lessen each’s burden. Again, avoid things by default until they get on the good lists. Ditch them if they get on the bad ones.

                                                        3. Collectively push their politicians for laws giving proper labels, auditing, etc that help with No 2. Also, push for externalities to be charged back to the companies somehow to incentivize less-damaging behavior.

                                                        4. Start their own businesses that practice what they preach. Build the principles into their charters, contracts, and so on. Niche businesses doing a better job create more options on the good lists in No 2. There’s entrepreneurs doing this.

                                                        So, not all-knowing consumers as you indicated. Quite a few strategies that are less impossible.

                                                        1. 4

                                                          @ac specifically suggested consumer choice as the solution to environmental issues, and that’s what I disagreed with.

                                                          Your point number 3 is quite different from the other three, and it’s what I would suggest as a far more effective strategy than consumer choice (along with putting pressure on various corporations). As an aside, I still wouldn’t call it easy - it’s always a hard slog.

                                                          Your points 1, 2 and 4 still rely on consumer choice, and effectively boil down to: either remove yourself from modern civilisation, or understand every supply chain in the world. I think it’s obvious that the first choice is neither desirable nor “much easier” for the vast majority of people (and I don’t think it’s the best possible solution). The second is impossible, as I said before.

                                                          1. 1

                                                            “consumer choice as the solution to environmental issues”

                                                            edit to add: consumer choice eliminated entire industries worth of companies because they wanted something else. It’s only worsened environmental issues. That’s probably not an argument against consumer choice so much as in favor of them willing to sacrifice the environment overall to get the immediate things they want.

                                                            “either remove yourself from modern civilisation, or understand every supply chain in the world”

                                                            This is another false dichotomy. I know lots of people who are highly-connected with other people but don’t own lots of tech or follow lots of fads. In many cases, they seem to know about them enough to have good conversations with people. They follow what’s going on or are just good listeners. Buying tons of gadgets or harmful things isn’t necessary for participation. You can get buy with a lot less than average middle or upper class person.

                                                            What you said is better understood as a spectrum to be in like most things. Lots of positions in it.

                                                            1. 2

                                                              I think we might actually be mostly in agreement, but we’re talking past each other a bit.

                                                              That’s probably not an argument against consumer choice so much as in favor of them willing to sacrifice the environment overall to get the immediate things they want.

                                                              I agree with this. But even when consumer choice is applied with environmental goals in mind, I believe its effect is very limited, simply because most people won’t participate.

                                                              This is another false dichotomy.

                                                              Yeah, but it was derived from your points :) I was just trying to hammer the point that consumer choice isn’t an effective solution.

                                                              You can get buy with a lot less than average middle or upper class person.

                                                              Totally. I’ve been doing that for a long time: avoiding gadgets and keeping the stuff I need (eg a laptop) as long as I can.

                                                              1. 1

                                                                “But even when consumer choice is applied with environmental goals in mind, I believe its effect is very limited, simply because most people won’t participate.”

                                                                Oh OK. Yeah, I share that depressing view. Evidence is overwhelmingly in our favor on it. It’s even made me wonder if I should even be doing the things I’m doing if so few are doing their part.

                                                      2. 5

                                                        The blame rests on the producers, not on the consumers.

                                                        Consumers are only able to select off of the menu of available products, so to speak. Most of the choices everyday consumers face are dictated by their employers and whatever is currently available to make it through their day.

                                                        No person can reasonably trace the entire supply chain for every item they purchase, and could likely be impossible even with generous time windows. Nor would I want every single consumer to spend their non-working time to tracing these chains.

                                                        Additionally, shifting this blame to the consumer creates conditions where producers can charge a premium on ‘green’ and ‘sustainable’ products. Only consumers with the means to consume ‘ethically’ are able to do so, and thus shame people with less money for being the problem.

                                                        The blame falls squarely on the entities producing these products and the states tasked with regulating production. There will be no market-based solution to get us out of the climate catastrophe, and we certainly can’t vote for a green future with our dollars.

                                                        1. 4

                                                          Consumers are only able to select off of the menu of available products, so to speak. Most of the choices everyday consumers face are dictated by their employers and whatever is currently available to make it through their day.

                                                          That’s not true even though it seems it is. The consumers’ past behavior and present statements play a major role in what suppliers will produce. Most of what you see today didn’t happen overnight. There were battles fought where quite a few companies were out there doing more ethical things on supply side. They ended up bankrupt or with less marketshare while the unethical companies got way ahead through better marketing of their products. With enough wealth accumulated, they continued buying the brands of the better companies remaking them into scumbag companies, too, in many cases.

                                                          For instance, I strongly advise against companies developing privacy- or security-oriented versions of software products that actually mitigate risks. They’ll go bankrupt like such companies often always did. The companies that actually make lots of money apply the buzzwords customers are looking for, integrate into their existing tooling (often insecure), have features they demand that are too complex to secure, and in some cases are so cheap the QA couldn’t have possibly been done right. That has to be private or secure for real against smart black hats. Not going to happen most of the time.

                                                          So, I instead tell people to bake cost-effective security enhancements and good service into an otherwise good product advertised for mostly non-security benefits. Why? Because that’s what demand-side responds to almost every time. So, the supply must provide it if hoping to make waves. Turns out, there’s also an upper limit to what one can achieve in that way, too. The crowds’ demands will keep creating obstacles to reliability, security, workers’ quality of life, supplier choice, environment… you name it. They mostly don’t care either where suppliers being honest about costs will be abandoned for those delivering to demand side. In face of that, most suppliers will focus on what they think is in demand across as many proven dimensions as possible.

                                                          Demand and supply side are both guilty here in a way that’s closely intertwined. It’s mostly demand side, though, as quite a few suppliers in each segment will give them whatever they’re willing to pay for at a profit.

                                                          1. 3

                                                            I agree with a lot of your above point, but want to unpack some of this.

                                                            Software security is a strange case to turn to since it has less direct implications on the climate crisis (sure anything that relies on a datacenter is probably using too much energy) compared to the production of disposable, resource-intensive goods.

                                                            Demand and supply side are both guilty here in a way that’s closely intertwined. It’s mostly demand side, though, as quite a few suppliers in each segment will give them whatever they’re willing to pay for at a profit.

                                                            I parse this paragraph to read: we should blame consumers for buying what’s available and affordable, because suppliers are incapable of acting ethically (due to competition).

                                                            So should we blame the end consumer for buying a phone every two years and not the phone manufacturers/retailers for creating rackets of planned obsolescence?

                                                            And additionally, most suppliers are consumers of something else upstream. Virtually everything that reaches an end consumer has been consumed and processed several times over by suppliers above. The suppliers are guilty on both counts by our separate reasoning.

                                                            Blaming individuals for structural problems simply lets suppliers shirk any responsibility they should have to society. After all, suppliers have no responsibility other than to create profits. Suppliers’ bad behavior must be curtailed either through regulation, public education campaigns to affect consumption habits, or organizing within workplaces.

                                                            (As an aside, I appreciate your response and it’s both useful and stimulating to hear your points)

                                                            1. 2

                                                              “I parse this paragraph to read: we should blame consumers for buying what’s available and affordable, because suppliers are incapable of acting ethically (due to competition).”

                                                              You added two words, available and affordable, to what I said. I left affordable off because many products that are more ethical are still affordable. Most don’t buy them anyway. I left availability off since there’s products appearing all the time in this space that mostly get ignored. The demand side not buying enough of what was and currently is available in a segment sends a message to suppliers about what they should produce. Especially if it’s consistent. Under vote with your wallet, we should give consumers their share of credit or blame for anything their purchasing decisions as a whole are supporting or destroying. That most won’t deliberately try to obtain an ethical supplier of… anything… supports my notion demand side has a lot to do with unethical activities of financially-successful suppliers.

                                                              For a quick example, there are often coops and farmers markets in lots of rural areas or suburban towns in them. There’s usually a segment of people who buy from them to support their style of operation and/or jobs. There’s usually enough to keep them in business. You might count Costco in that, too, where a membership fee that’s fixed cost gets the customers a pile of stuff at a promised low-markup and great service. There’s people that use credit unions, esp in their industry, instead of banks. There’s people that try to buy from nonprofits, public beneit companies, companies with good track record, and so on. There’s both a demand side (tiny) and suppliers responding to it that show this could become a widespread thing.

                                                              Most consumers on demand side don’t do that stuff, though. They buy a mix of necessities and arbitrary stuff from whatever supplier is lowest cost, cheapest, most variety, promoting certain image, or other arbitrary reasons. They do this so much that most suppliers, esp market leaders, optimize their marketing for that stuff. They also make more money off these people that let them put lots of ethical, niche players out of business over time. So, yeah, I’d say consumer demand being apathetic to ethics or long-term thinking is a huge part of the problem given it puts tens of billions into hands of unethical parties. Then, some of that money goes into politicians’ campaign funds so they make things even more difficult for those companies’ opponents.

                                                              “Blaming individuals for structural problems simply lets suppliers shirk any responsibility they should have to society.”

                                                              Or the individuals can buy from different suppliers highlighting why they’re doing it. Other individuals can start companies responding to that massive stated demand. The existing vendors will pivot their operations. Things start shifting. It won’t happen without people willing to buy it. Alternatively, using regulation as you mentioned. I don’t know how well public education can help vs all the money put into advertising. The latter seems more powerful.

                                                              “(As an aside, I appreciate your response and it’s both useful and stimulating to hear your points)”

                                                              Thanks. Appreciate you challenging it so I think harder on and improve it. :)

                                                          2. 2

                                                            Only consumers with the means to consume ‘ethically’ are able to do so, and thus shame people with less money for being the problem.

                                                            This is ignoring reality, removing cheaper options does not make the other options cheaper to manufacture. It is not shaming people.

                                                            You are also ignoring the fact that in a free country the consumers and producers are the same people. A dissatisfied consumer can become a producer of a new alternative if they see it as possible.

                                                          3. 3

                                                            Exactly. The consumers could be doing more on issues like this. They’re complicit or actively contribute to the problems.

                                                            For example, I use old devices for as long as I can on purpose to reduce waste. I try to also buy things that last as long as possible. That’s a bit harder in some markets than others. For appliances, I just buy things that are 20 years old. They do the job and usually last 10 more years since planned obsolescence had fewer tricks at the time. ;) My smartphone is finally getting unreliable on essential functions, though. Bout to replace it. I’ll donate, reuse, or recycle it when I get new one.

                                                            On PC side, I’m using a backup whose age I can’t recall with a Celeron after my Ubuntu Dell w/ Core Duo 2 died. It was eight years old. Attempting to revive it soon in case it’s just HD or something simple. It’s acting weird, though, so might just become a box for VM experiments, fuzzing, opening highly-untrustworthy URLs or files, etc. :)

                                                          4. 7

                                                            Capitalism is killing us in a very literal sense by destroying our habitat at an ever accelerating rate

                                                            Which alternatives would make people happier to consume less – drive older cars, wear rattier clothing, and demand fewer exotic vacations? Because, really, that’s the solution to excessive use of the environment: Be happier with less.

                                                            Unfortunately, greed has been a constant of human nature far too long for capitalism to take the blame there.

                                                            1. 9

                                                              Which alternatives would make people happier to consume less – drive older cars, wear rattier clothing, and demand fewer exotic vacations?

                                                              Why do people want new cars, the latest fashions, and exotic vacations in the first place? If it’s all about status and bragging rights, then it’s going to take a massive cultural shift that goes against at least two generation’s worth of cultural programming by advertisers on the behalf of the auto, fashion and travel industries.

                                                              I don’t think consumerism kicked into high gear until after the end of World War II when modern advertising and television became ubiquitous, so perhaps the answer is to paraphrase Shakespeare:

                                                              The first thing we do, let’s kill all the advertisers.

                                                              OK, maybe killing them (or encouraging them to off themselves in the tradition of Bill Hicks) is overkill. Regardless, we should consider the possibility that advertising is nothing but private sector psyops on behalf of corporations, and should not be protected as “free speech”.

                                                              1. 2

                                                                If there was an advertising exception for free speech, people would use it as an unprincipled excuse to ban whatever speech they didn’t like, by convincing the authorities to classify it as a type of advertising. After all, most unpopular speech is trying to convince someone of something, right? That’s what advertising fundamentally is, right?

                                                                Remember that the thing that Oliver Wendell Holmes called “falsely shouting fire in a crowded theater” wasn’t actually shouting “fire” in an actual crowded theater - it was a metaphor he used to describe protesting the military draft.

                                                                1. 9

                                                                  I agree: there shouldn’t be an advertising exception on free speech. However, the First Amendment should only apply to homo sapiens or to organisms we might eventually recognize as sufficiently human to possess human rights. Corporations are not people, and should not have rights.

                                                                  They might have certain powers defined by law, but “freedom of speech” shouldn’t be one of them.

                                                              2. 3

                                                                IMO, Hedonistic adaptation is a problem and getting worse. I try to actively fight against it.

                                                                1. 2

                                                                  It would be a start if we designed cities with walking and public transportation in mind, not cars.

                                                                  My neighborhood is old and walkable. I do shopping on foot (I have a bicycle but don’t bother with it). For school/work, take a single bus and a few minutes walking. Getting a car would be a hassle, I don’t have a place to park it, and I’d have to pay large annual fees for rare use.

                                                                  Newer neighborhoods appear to be planned with the idea that you’ll need a car for every single task. “Residential part” with no shops at all, but lots of room for parking. A large grocery store with a parking lot. Even train stations with a large parking lot, but no safe path for pedestrians/cyclists from the nearby neighborhoods.

                                                                2. 4

                                                                  The new features on phones are so fucking stupid as well. People are buying new phones to get animated emojis and more round corners. It’s made much worse with phone OEMs actively making old phones work worse by slowing them down.

                                                                  1. 7

                                                                    There has been no evidence to my knowledge that anyone is slowing old phones down. This continues to be an unfounded rumor

                                                                    1. 2

                                                                      There’s also several Lobsters that have said Android smartphones get slower over time at a much greater rate than iPhones. I know my Galaxy S4 did. This might be hardware, software bloat, or whatever. There’s phones it’s happening on and those it isn’t in a market where users definitely don’t want their phones slowing down. So, my theory on Android side is it’s a problem they’re ignoring on purpose or even contributing to due to incentives. They could be investing money into making the platform much more efficient across devices, removing bloat, etc. They ain’t gonna do that.

                                                                      1. 3

                                                                        Android smartphones get slower over time at a much greater rate than iPhones.

                                                                        In my experience, this tends to be 3rd party apps that start at boot and run all the time. Factory reset fixes it. Android system updates also make phones faster most of the time.

                                                                        1. 1

                                                                          Hmm. I’ll try it since I just backed everything up.

                                                                          1. 3

                                                                            I’m still using a Nexus 6 I got ~2.5 years ago. I keep my phone pretty light. No Facebook or games. Yet, my phone was getting very laggy. I wiped the cache (Settings -> Storage -> Cached data) and that seemed to help a bit, but overall, my phone was still laggy. It seemed to get really bad in my text messaging app (I use whatever the stock version is). I realized that I had amassed a lot of text messages over the years, which includes quite a lot of gifs. I decided to wipe my messages. I did that by installing “SMS Backup & Restore” and telling it to delete all of my text messages, since apparently the stock app doesn’t have a way to do this in bulk. It took at least an hour for the deletion to complete. Once it was done, my phone feels almost as good as new, which makes me really happy, because I really was not looking forward to shelling out $1K for a Pixel.

                                                                            My working theory is that there is some sub-optimal strategy in how text messages are cached. Since I switch in and out of the text messaging app very frequently, it wouldn’t surprise me if I was somehow frequently evicting things from memory and causing disk reads, which would explain why the lag impacted my entire phone and not just text messages. But, this is just speculation. And a factory reset would have accomplished the same thing (I think?), so it’s consistent with the “factory reset fixes things” theory too.

                                                                            My wife is still on a Nexus 5 (great phone) and she has a similar usage pattern as me. Our plan is to delete her text messages too and see if that helps things.

                                                                            Anyway… I realize this basically boils down to folk remedies at this point, but I’m just going through this process now, so it’s top of mind and figured I’d share.

                                                                            1. 2

                                                                              I’ll be damned. I baked up and wiped the SMS, nothing else. The phone seems like it’s moving a lot snappier. Literally a second or two of delay off some things. Some things are still slow but maybe app just is. YouTube always has long loading time. The individual videos load faster now, though.

                                                                              Folk remedy is working. Appreciate the tip! :)

                                                                              1. 2

                                                                                w00t! Also, it’s worth mentioning that I was experiencing much worse delay than a second or two. Google Nav would sometimes lock up for many seconds.

                                                                                1. 1

                                                                                  Maps seems OK. I probably should’ve been straight-up timing this stuff for better quality of evidence. Regardless, it’s moving a lot faster. Yours did, too. Two, strong anecdotes so far on top of factory reset. Far as we know, even their speed gains might have come from SMS clearing mostly that the reset did. Or other stuff.

                                                                                  So, I think I’m going to use it as is for a week or two to assess this change plus get a feel for a new baseline. Then, I’ll factory reset it, reinstall some apps from scratch, and see if that makes a difference.

                                                                                  1. 2

                                                                                    Awesome. Please report back. :-)

                                                                                    1. 2

                                                                                      I’ll try to remember to. I’m just still stunned it wasn’t 20 Chrome tabs or all the PDF’s I download during the day. Instead, text messages I wasn’t even using. Of all things that could drag a whole platform down…

                                                                                      1. 2

                                                                                        Sms is stored on the SIM card, right? That’s probably not got ideal I/O characteristics…

                                                                                        1. 1

                                                                                          I thought the contacts were but messages were on phone. I’m not sure. The contacts being on there could have an effect. I’d have hoped they cached a copy of SIM contents onto in-phone memory. Yeah, SIM access could be involved.

                                                                              2. 2

                                                                                Now, that’s fascinating. I don’t go in and out of text a lot but do have a lot of text messages. Many have GIF’s. There’s also at least two other apps that accumulate a lot of stuff. I might try wiping them. Btw, folk remedies feel kind of justified when we’re facing a complex, black-box system with nothing else to go on. ;)

                                                                        2. 2

                                                                          Official from apple: https://www.apple.com/au/iphone-battery-and-performance/

                                                                          They slow phones with older batteries but don’t show the user any indication that it can be fixed very cheaply by replacing the battery (Until after the recent outrage) and many of them will just buy a new phone and see it’s much faster.

                                                                          1. 12

                                                                            Wow, so much to unpack here.

                                                                            You said they slow old phones down. That is patently false. New versions of iOS are not made to run slowly on older model hardware.

                                                                            Apple did not slow phones down with old batteries. They throttled the CPU of phones with failing batteries (even brand new ones!) to prevent the phone from crashing due to voltage drops. This ensured the phone was still functional even if you needed your phone in an emergency. Yes it was stupid there was no notification to the user. This is no longer relevant because they now provide notifications to the user. This behavior existed for a short period of time in the lifespan of the iPhone: less than 90 days between introduction of release with throttling and release with controls to disable and notifications to users.

                                                                            Please take your fake outrage somewhere else.

                                                                            1. 5

                                                                              Apple did not slow phones down with old batteries. They throttled the CPU of phones with failing batteries (even brand new ones!) to prevent the phone from crashing due to voltage drops.

                                                                              In theory this affects new phones as well, but we know that as batteries grow older, they break down, hold less charge, and have a harder time achieving their design voltage. So in practice, this safety mechanism for the most part slows down older phones.

                                                                              You claim @user545 is unfairly representing the facts by making Apple look like this is some evil ploy to increase turnover for their mobile phones.

                                                                              However, given the fact that in reality this does mostly make older phones seem slower, and the fact that they put this in without ever telling anyone outside Apple and not allowing the user to check their battery health and how it affected the performance of their device, I feel like it requires a lot more effort not to make it look like an intentional decision on their part.

                                                                              1. 2

                                                                                Sure, but if you have an old phone with OK batteries, then their code did not slow it down. So I think it is still more correct to say they slowed down those with bad batteries than those that were old even if most of those with bad batteries were also bad which really depended on phone’s use.

                                                                                The difference is not just academic. For example I have “inherited” iPhone6 from my wife that still has a good battery after more than 2 years and performs fine.

                                                                                1. 2

                                                                                  the fact that they put this in without ever telling anyone outside Apple

                                                                                  It was in the release notes of that iOS release…

                                                                                  edit: additionally it was known during the beta period in December. This wasn’t a surprise.

                                                                                  1. 1

                                                                                    Again, untrue. The 11.2 release notes make no mention of batteries, throttling, or power management. (This was the release where Apple extended the throttling to the 7 series of phones.) The 10.2.1 release notes, in their entirety, read thus:

                                                                                    iOS 10.2.1 includes bug fixes and improves the security of your iPhone or iPad. It also improves power management during peak workloads to avoid unexpected shutdowns on iPhone.

                                                                                    That does not tell a reader that long-term CPU throttling is taking place, that it’s restricted to older-model iPhones only, that it’s based on battery health and fixable with a new battery (not a new phone), etc. It provides no useful or actionable information whatsoever. It’s opaque and frankly deceptive.

                                                                                    1. 0

                                                                                      You’re right, because I was mistaken and the change was added in iOS 10.2.1, 1/23/2017

                                                                                      https://support.apple.com/kb/DL1893?locale=en_US

                                                                                      It also improves power management during peak workloads to avoid unexpected shutdowns on iPhone.

                                                                                      A user on the day of release:

                                                                                      Hopefully it fixes the random battery shutoff bug.

                                                                                      src: https://forums.macrumors.com/threads/apple-releases-ios-10-2-1-with-bug-fixes-and-security-improvements.2028992/page-2#post-24225066

                                                                                      additionally in a press release:

                                                                                      In February 2017, we updated our iOS 10.2.1 Read Me notes to let customers know the update ‘improves power management during peak workloads to avoid unexpected shutdowns.’ We also provided a statement to several press outlets and said that we were seeing positive results from the software update.

                                                                                      Please stop trolling. It was absent from the release notes for a short period of time. It was fixing a known issue affecting users. Go away.

                                                                                      1. 4

                                                                                        Did you even read the comment you are responding to? I quoted the 10.2.1 release notes in full–the updated version–and linked them too. Your response is abusive and in bad faith, your accusations of trolling specious.

                                                                                        1. [Comment removed by moderator pushcx: We've never had cause to write a rule about doxxing, but pulling someone's personal info into a discussion like this to discredit them is inappropriate.]

                                                                                          1. 2

                                                                                            I don’t hate Apple. I’m not going to sell my phone because I like it. The battery is even still in good shape! I wish they’d been a little more honest about their CPU throttling. I don’t know why this provokes such rage from you. Did you go through all my old comments to try to figure out what kind of phone I have? Little creepy.

                                                                                            1. 2

                                                                                              I’m not angry about anything here. It’s just silly that such false claims continue to be thrown around about old phones intentionally being throttled to sell new phones. Apple hasn’t done that. Maybe someone else has.

                                                                                              edit: it took about 30 seconds to follow your profile link to your website -> to Flickr -> to snag image metadata and see what phone you own.

                                                                                2. -3

                                                                                  They throttled the CPU of phones with failing batteries (even brand new ones!)

                                                                                  This is untrue. They specifically singled out only older-model phones for this treatment. From the Apple link:

                                                                                  About a year ago in iOS 10.2.1, we delivered a software update that improves power management during peak workloads to avoid unexpected shutdowns on iPhone 6, iPhone 6 Plus, iPhone 6s, iPhone 6s Plus and iPhone SE. [snip] We recently extended the same support to iPhone 7 and iPhone 7 Plus in iOS 11.2.

                                                                                  In other words, if you buy an iPhone 8 or X, no matter what condition the battery is in, Apple will not throttle the CPU. (In harsh environments–for example, with lots of exposure to cold temperatures–it’s very plausible that an 8 or X purchased new might by now have a degraded battery.)

                                                                                  1. 2

                                                                                    You are making a claim without any data to back it up.

                                                                                    Can you prove that the batteries in the new iPhones suffer voltage drops when they are degraded? If they use a different design with more/smaller cells then AIUI they would be significantly less likely to have voltage drops when overall capacity is degraded.

                                                                                    But no, instead you continue to troll because you have a grudge against Apple. Take your crap elsewhere. It’s not welcome here.

                                                                                    1. 3

                                                                                      You’re moving the goalposts. You claimed Apple is throttling the CPU of brand new phones. You were shown this to be incorrect, and have not brought any new info to the table. Your claim that the newer phones might be designed so as to not require throttling is irrelevant.

                                                                                      Please don’t accuse (multiple) people of trolling. It reflects poorly on yourself. All are welcome here.

                                                                                      1. 3

                                                                                        You can buy a brand new phone directly from Apple (iPhone 6S) with a faulty battery and experience the throttling. I had this happen.

                                                                              2. 1

                                                                                Google services update in the background even when other updates are disabled. Even if services updates are not intended to slow down the phone, they still do.

                                                                              3. 3

                                                                                The new features on phones are so fucking stupid as well.

                                                                                I think the consumer who pays for it is stupid.

                                                                                1. 3

                                                                                  It’s both. The user wants something new every year and OEMs don’t have anything worthwhile each year so they change things for the sake of change like adding rounded corners on the LCD or cutting a chunk out of the top. It makes it seem like something is new and worth buying when not much worthwhile has actually changed.

                                                                                  1. 4

                                                                                    I think companies would always take the path of least resistance that works. If consumers didn’t fall for such stupid tricks the companies that did them would die off.

                                                                              4. 2

                                                                                Yep. I guess humanity’s biggest achievement will be to terraform itself out of existence.

                                                                                This planet does neither bargain nor care about this civilizations’ decision making processes. It will keep flying around the sun for a while, with or without humans on it.

                                                                                I’m amazed by the optimism people display in response to pointing out that the current trajectory of climate change makes it highly unlikely that our grand-grand-children will ever be born.

                                                                                1. 2

                                                                                  The list is endless, and it all comes down to the American ethos that making money is a sacred right that trumps all other concerns.

                                                                                  s/American/human

                                                                                  You can’t fix a problem if you misunderstand what causes it.

                                                                                  1. 5

                                                                                    Ideology matters, and America has been aggressively promoting toxic capitalist ideology for many decades around the world. Humans aren’t perfect, but we can recognize our problems and create systems around us to help mitigate them. Capitalism is equivalent of giving a flamethrower to a pyromaniac.

                                                                                    1. 3

                                                                                      If you want to hash out how “toxic capitalism” is ruining everything, that’s fine–I’m just observing that many other countries (China, Germany, India, Mozambique, Russia, etc.) have done things that, to me at least, dispel the notion of toxic capitalism as purely being American in origin.

                                                                                      And to avoid accusations of whataboutism, the reason I point those other countries out is that if a solution is put forth assuming that America is the problem–and hence itself probably grounded in approaches unique to an American context–it probably will not be workable in other places.

                                                                                      1. 2

                                                                                        Nobody is saying that capitalism alone is the problem or that it’s unique to America. I was saying that capitalism is clearly responsible for a lot of harm, and that America promotes it aggressively.

                                                                                        1. 0

                                                                                          Don’t backpedal. You wrote:

                                                                                          The list is endless, and it all comes down to the American ethos that making money is a sacred right that trumps all other concerns.

                                                                                          As to whether or not capitalism is clearly responsible for a lot of harm, it’s worth considering what the alternatives have accomplished.

                                                                                          1. 0

                                                                                            Nobody is backpedaling here, and pointing at other failed systems saying they did terrible things too isn’t much of an argument.

                                                                                1. 20

                                                                                  sigh

                                                                                  So, this has already sparked a discussion about taste, freedom of speech, the whole thing.

                                                                                  The joke in question is bad, very bad. It’s plain unfitting, and it isn’t even remotely funny. It’s US-centric. RMS, the person making and subsequently claiming it, has a history of making sexual and other inappropriate commentary (e.g. arguing eugenics). His quoted comment about child birth is another example of RMS speaking about things he probably doesn’t have a very qualified opinion on. Most (all?) of the people mentioned in the article discussing the issue will never be affected by this in the real world. Seriously, I expect one of those people to stand up and say “You know what? We aren’t even the right group to discuss that in!”.

                                                                                  And this is the issue he pulls his authority card? Seriously? For a bad joke that was already shit in the 90s? That - even ignoring the punchline being terrible - just plain isn’t funny? Which boundary does that cross? Probably his egos.

                                                                                  Seriously, this is a tech manual. This is the place where you can finally have your “let’s just talk tech her”. And there, this discussion comes up?

                                                                                  1. 17

                                                                                    The thing I find weird is the clear generational gap in Internet users that mean that people end up talking past each other.

                                                                                    For older people who grew up thinking that Sendmail m4 macros were somehow intuitive, and that C was the new hotness, this is not a joke about abortion. It’s about censorship. That’s the hill RMS thinks he’s dying on. Removing the joke is at the risk of putting words in his mouth, censoring the manual.

                                                                                    Of course, the younger people who live in a world where Javascript isn’t ridiculous to use on a server, where everything-as-a-service is the norm demand takedowns of things outside of their overton window. To them, it’s a matter of not having a frankly disgusting joke about the very real problems of abortion in the US in a technical manual that has nothing to do with those problems. They don’t understand the culture in which GNU was founded, they believe that it is RMS’ job to change to fit with their culture.

                                                                                    This is what happens when an unstoppable force meets an immovable object. I’m just not sure who plays which part here. There is a reasonable answer, and the good news for the kids is that this has happened before several times: fork glibc. Fork it to remove RMS’ influence from the project and fork it to remove the offending text (for people that want it removed).

                                                                                    1. 17

                                                                                      Even as a commentary about censorship, it’s pretty freaking oblique. It should be removed on the technical grounds that it’s inefficient GNU crap.

                                                                                      1. 2

                                                                                        Stallman is pretty freaking oblique at the best of times when it comes to his sense of humour. Saying that GNU is full of inefficient crap is like saying that water is wet, or that the Linux kernel is a bug-ridden dumpster fire.

                                                                                        If every GNU inefficiency was removed, it’d be BSD.

                                                                                        1. -1

                                                                                          It should be removed on the technical grounds that it’s inefficient GNU crap.

                                                                                          Nobody force you to use GNU crap.

                                                                                          But GNU is and have always been openly political.

                                                                                          You are free to use software that is apparently neutral. if you don’t like it.
                                                                                          And you have plenty of choice on the market: Microsoft, Apple, Google… all are pretty ready to serve your needs (and collect your data for whatever purpose, and lobbying for DRM and so on../)

                                                                                          But “as a commentary about censorship”, that joke is perfectly fine.

                                                                                          1. 6

                                                                                            Nobody force you to use GNU crap.

                                                                                            The fact that you are saying this to tedu (an OpenBSD developer) is kind of funny.

                                                                                            1. 5

                                                                                              I’m fine with GNU being a political project. Indeed, I actively advocate for projects to make their mind up.

                                                                                              But “as a commentary about censorship”, that joke is perfectly fine.

                                                                                              A lot of the project itself does not seem to agree, especially in the context of having it in the documentation. Except RMS, who pulls rank over a joke that he himself made. Which makes the GNU project his personal opinion/joke vehicle.

                                                                                              1. 3

                                                                                                Except RMS, who pulls rank over a joke that he himself made. Which makes the GNU project his personal opinion/joke vehicle.

                                                                                                I don’t see the point you’re making here? The GNU project was always an expression of political views that were, originally, personal to RMS. If the project ran by majority consensus it would have given up on the whole free software thing a long time ago.

                                                                                                1. -3

                                                                                                  Using your “Rust Community Team” hat here is crass, and only reinforces some people’s beliefs (myself included) about these types of thought police organizations.

                                                                                                  I sure hope the non-“Rust Community Team” people show less virtue signalling. It puts your project under a terrible spotlight.

                                                                                                  1. 5

                                                                                                    FWIW, I find the use of the hat inappropriate here as well.

                                                                                                    That being said, as discussed below, I think it depends on what you think the hat means, exactly. It seems Florian uses the hat differently than many here might expect.

                                                                                          2. 7
                                                                                            1. I think the joke is funny. It’s even more funny now.
                                                                                            2. RMS’s character has no bearing on the legitimacy of the joke.
                                                                                            3. You don’t need to be qualified to have an opinion.
                                                                                            4. Any group can discuss any topic, there is no “right” group.
                                                                                            5. RMS is the benevolent dictator of GNU, and as such has the authority to veto decisions in rare situations like these.
                                                                                            1. 10

                                                                                              Be that as it may, when the people who have written the code (glibc was originally written by someone else (not RMS), and Ulrich Drepper is now responsible for something like 70% of the code) and make it all work ask you to back off, it’s a stupid hill to die on. Yeah, you might win the battle, but you’ll lose the war.

                                                                                              Last time something like this happened, everyone switched to using eglibc and it wasn’t until the RMS-mandated steering committee was dissolved that people switched back to glibc. If RMS decides to be a jerk about things, watch everyone fork it again or sink their resources into musl.

                                                                                              There’s being right, and there’s being so egotistical that you burn down the house because you didn’t get your way.

                                                                                              1. 4

                                                                                                He has veto power for precisely these cases where “everyone else” disagrees, so I don’t think it’s a stupid hill to die on. In any case, I agree with you, RMS will lose this war, this is just the beginning.

                                                                                                1. 15

                                                                                                  Vetoing the removal of a little-used architecture with heavy maintenance burden because they want to support those few users is a good hill to die on. Vetoing the removal of a joke that everyone else wants to remove from the manual and doesn’t in any way affect the operation of the library is a stupid hill to die on.

                                                                                                  1. 3

                                                                                                    That’s in your opinion. If you care the culture of your project not taking itself so seriously, I think it’s a good hill to die on.

                                                                                            2. 5

                                                                                              As a participant in Rust Community and a proponent of eugenics, your use of Rust Community Team hat makes me uncomfortable. Was it necessary? Are you really speaking for Rust Community Team here? I hope my eugenics advocacy won’t affect my Rust participation.

                                                                                              As for the joke, the joke is clearly about censorship and not about abortion. I think attempt to censor the joke makes it more relevant.

                                                                                              1. 2

                                                                                                As for the joke, the joke is clearly about censorship and not about abortion.

                                                                                                Jokes, by their nature, are not clear and subject to cultural background and education. In my opinion, it’s a bit condescending to claim that it has universal understanding and appeal.

                                                                                                I think attempt to censor the joke makes it more relevant.

                                                                                                The origin of the patch seems to be the person just didn’t think it relayed any meaningful information to a user of the function. I don’t think that falls into common usage of “censorship”.

                                                                                                1. -2

                                                                                                  I don’t think that falls into common usage of “censorship”.

                                                                                                  Yes, and I have yet to see a documentation patch forced on a project by a state.

                                                                                                  1. 2

                                                                                                    Censorship exists only when done by the state??

                                                                                                2. 1

                                                                                                  On FOSS social issues, I generally put the hat on here. As my work for the Rust project is social, judging which of these issues I should put the hat on would only lead to problems. I’m fine with people knowing my affiliation and I think it’s more honest for people to know it. I don’t speak for the team, but I am a member of the team.

                                                                                                  On Eugenics: it’s, in my view, an only thinly veiled form of Ableism, and as such opposed to the goal of being inclusive, especially also to people with disability. Many forms fundamentally attack the right to live of people with disabilities, for example by arguing for their abortion.

                                                                                                  Just to be clear on which comment by RMS I’m referring to (on people with Trisomy 21):

                                                                                                  If you’d like to love and care for a pet that doesn’t have normal human mental capacity, don’t create a handicapped human being to be your pet. Get a dog or a parrot…

                                                                                                  If you want to support that comment, go ahead.

                                                                                                  1. 3

                                                                                                    I support the idea behind the comment. Given medical acceptance of prenatal screening of trisomy 21, this is one of less extreme among RMS’s positions.

                                                                                                    I agree the expression of the idea in the comment you quoted leaves a lot to be desired.

                                                                                                    1. -1

                                                                                                      Prenatal screening of trisomy 21 are generally accepted as a way to increase survival chances for the fetus.
                                                                                                      Trisomy 21 increases the risk of heart issues at birth, that can be handled in the proper structure, but would lead to secure death if not addressed promptly.

                                                                                                      Some people use it for eugenetics (usually with amniocentesis, that kills 1 healthy children out of 200 if I remember correctly).

                                                                                                      Now, IMO what RMS means is horrible, disgusting and plain dangerous.
                                                                                                      But it’s not related to freedom. And he has the right to think (and say) it.

                                                                                                      1. 1

                                                                                                        Prenatal screening of trisomy 21 are generally accepted as a way to increase survival chances for the fetus.

                                                                                                        Do you have a citation for your “generally accepted” claim? There appears to be at least some evidence to the contrary:

                                                                                                        About 92% of pregnancies in Europe with a diagnosis of Down syndrome are terminated.[14] In the United States, termination rates are around 67%, but this rate varied from 61% to 93% among different populations.[13] Rates are lower among women who are younger and have decreased over time.[13] When nonpregnant people are asked if they would have a termination if their fetus tested positive, 23–33% said yes, when high-risk pregnant women were asked, 46–86% said yes, and when women who screened positive are asked, 89–97% say yes.[75]

                                                                                                        https://en.wikipedia.org/wiki/Down_syndrome#Abortion_rates

                                                                                                        1. 0

                                                                                                          This is entirely offtopic here, but I don’t want to flee the question.

                                                                                                          My source is my doctor, that incidentally is also my wife.
                                                                                                          When the prenatal screening of our second daughter established 1/350 probability of a Down syndrome, she explained me about amniocentesis, about the risks for the fetus and about the implications and the medical reasoning beyond it. It’s a complex topic and I’m not competent enough to expose it here deeply, but the relevant point was that, while several doctors object to abortion as a murder in contrast with their oath and ethics, prenatal screening is designed to increase the survival of the fetus, so every doctor is fine with it.

                                                                                                    2. 1

                                                                                                      On FOSS social issues, I generally put the hat on here. As my work for the Rust project is social, judging which of these issues I should put the hat on would only lead to problems. I’m fine with people knowing my affiliation and I think it’s more honest for people to know it. I don’t speak for the team, but I am a member of the team.

                                                                                                      While I do not agree with you on the “joke on documentation” issue, I really support this approach.

                                                                                                      Hacking is a ethical and political action.

                                                                                                    3. -1

                                                                                                      I hope my eugenics advocacy won’t affect my Rust participation.

                                                                                                      If that’s what you think that means, and you advocate for any intelligence-based eugenics, you might want to reconsider your position on eugenics.

                                                                                                      This obviously would only affect you if you attempted to add eugenics commentary to the Rust project itself in some way. Same as if you attempted to add any other irrelevant polarizing commentary.

                                                                                                      1. 1

                                                                                                        I don’t talk eugenics on Rust space. Not because eugenics is wrong (it isn’t), but because it’s off-topic.

                                                                                                        1. 2

                                                                                                          it’s off-topic

                                                                                                          Yes. And it’s also off-topic for glibc.

                                                                                                          1. 0

                                                                                                            No, it isn’t. By definition.

                                                                                                            You might not agree with GNU or with rms here, or you might prefer that glibc would not be a GNU project, but it is.

                                                                                                            1. 2

                                                                                                              Fine. But the consensus of the primary maintainers is that it’s off-topic. Therefore it’s off-topic for whatever fork of glibc everyone ends up using. Because if we get another eglibc situation, everyone will use the fork maintained by the maintainers, and no one will use the fork “maintained” by rms.

                                                                                                              It’s de facto off-topic for those who accept reality.

                                                                                                              1. 0

                                                                                                                Anyone who “accepts reality” in that sense wouldn’t be contributing to GNU in the first place. The project has always been about RMS telling the rest of the world they’re wrong.

                                                                                                                1. 1

                                                                                                                  See eglibc. A non-GNU fork already happened, and was reintegrated when the issue was dropped.

                                                                                                                  I don’t see how you can say that those kind of people wouldn’t be contributing to GNU, when they clearly are and that’s what this is all about. If those kind of people wouldn’t be contributing to GNU, then why is there any debate?

                                                                                                                  1. 1

                                                                                                                    There is debate precisely because the people contributing don’t subscribe to your notion that the primary maintainer consensus is all that matters. glibc contributors do care about GNU and RMS, otherwise the eglibc-style fork would already have happened and the project would now be being maintained outside the GNU umbrella.

                                                                                                  1. [Comment removed by author]

                                                                                                    1. 6

                                                                                                      The only thing you’ve done in this thread is fanned the flames. You might consider re-reading @pushcx’s comment above: https://lobste.rs/s/nf3xgg/i_am_leaving_llvm#c_pwiove

                                                                                                      1. 3

                                                                                                        Yep. The point of codes of conduct is to legitimize and give power to particular kinds of discriminatory thoughts and behaviors, and it’s working wonders, in this case by pushing away one core contributor.

                                                                                                        1. 1

                                                                                                          I’m trying to understand. What is the specific wording of llvm’s CoC that legitimizes particular kinds of discrimatory thoughts and behaviors?

                                                                                                          1. [Comment removed by author]

                                                                                                            1. 7

                                                                                                              If you read the follow up messages it seems like a great deal was lost for the LLVM project.

                                                                                                        1. 26

                                                                                                          I’m glad to see this trend of standing up against poltiical exclusion in Open Source. I assume that the Code of Conduct for llvm was written in good faith, but the continued demonization of political groups (and to some extent, white men) is troubling. Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/

                                                                                                          1. 43

                                                                                                            Who is being excluded? How is Outreachy preventing someone from contributing to llvm?

                                                                                                            I remember those days too. “No one” cared because “everyone” assumed you were white, male, and college educated. “There are no women on the Internet” dates back, at least, to the early ’90s.

                                                                                                            As a black male dropout, that was fine for me— I could get involved. No one questioned my capabilities. And as long as I kept up a good impression of being fluent in upper-middle to upper-class white culture, I could build my skills and social capital.

                                                                                                            I also got beat up on the street in front of my grandmother for “showing off” how I could “talk white” at school.

                                                                                                            I also remember, when Pentiums were out, using a pawn shop purchased Apple IIc with a gifted modem. I also remember hacking into dial-up pools to get telnet— haha, as if my machine could talk SLIP or PPP. I remember begging friends from MOOs and IRC for a shell account. I remember having no concept of the disparity between myself and the people with whom I played games, chatted, wrote code, and made friends. They simply had things, and I didn’t.

                                                                                                            I don’t see a problem with choosing to give their time and their money to mentor people who otherwise might not be able to participate. There certainly hasn’t been a problem with people choosing to give their time and their money to people who look like them, sound like them, grew up with them, attend the same church as them, went to the same school as them, are friends with them, enjoy the same movies as them, play the same sports as them, and just happen to be a well-off straight white male. Just. Like. Them.

                                                                                                            1. 5

                                                                                                              I also remember hacking into dial-up pools to get telnet

                                                                                                              Holy crap, you and I are kindred spirits. The terminal-concentrator at the local university dropped you into a command line…you were supposed to then immediately telnet to the VAX on campus, but they didn’t enforce that. I was 13 years old and certainly not a student at said university but boy did I get around using that little trick.

                                                                                                              (This would’ve been like 1993. I’m old.)

                                                                                                              1. 4

                                                                                                                🙏🏾 s/the local university/Sprint/ and that was me too!

                                                                                                                1. 4

                                                                                                                  It was an eight year old Amiga 1000 that my dad got at an estate sale for like $20 because it would only boot up about half the time and shut down and random intervals, hooked up to a black and white TV, with an old external 1200 baud modem and a terminal program I got off a disk on the cover of a magazine. I felt like the lord of all creation.

                                                                                                                  Man I’m nostalgic now.

                                                                                                                  1. 4

                                                                                                                    Who ever thought we’d make it this far?

                                                                                                              2. 3

                                                                                                                I remember when internet arrived at my hometown. It was 1996. I am not sure such delay was related to skin color.

                                                                                                              3. 46

                                                                                                                There is no whitemend.

                                                                                                                Outreachy isn’t out to make a monster out of you. It’s trying to correct for GSoC. You don’t like Outreachy’s policies, a much smaller, less well-funded org than Google, then go through GSoC and Google. You have lots of other options other than Outreachy.

                                                                                                                The code of conduct doesn’t say anything about how white men are bad. Reading the CoC, if you object that strongly to it that you must leave, then please do! That’s the CoC working as intended. You are deciding to exclude yourself by deciding that what the CoC forbids (i.e. being an asshole) is something that you must be and defend.

                                                                                                                Also, one more thing.

                                                                                                                I wish I could explain to people who are privileged one way or another, that it doesn’t mean your entire life is handed to you in a silver platter. Being a white male doesn’t mean you can’t be poor or can’t be gay (thus discriminated) or that you can’t have a slew of other problems.

                                                                                                                It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.

                                                                                                                1. 5

                                                                                                                  Reading the CoC, if you object that strongly to it that you must leave, then please do! That’s the CoC working as intended. You are deciding to exclude yourself by deciding that what the CoC forbids (i.e. being an asshole) is something that you must be and defend.

                                                                                                                  I would disagree with that notion. I think it’s certainly possible to disagree with the CoC or parts of it without being an “asshole as the CoC forbids”. Personally and for example, I would say the “Be welcoming” clause is too exhaustive and could be shortened to “Be welcoming to everyone regardless of who they are and choose to be” which would IMO cover the same topics as it does now. The fifth clause is also way too broad and vague. A simple note that discussion not furthering the the project or it’s software, being NSFW or otherwise non-productive would have achieved the same goal and would give moderators more leeway to deal with troublemakers.

                                                                                                                  I specifically wonder why number 6 was necessary. It’s a community of coders, if they can’t understand disagreement I seriously question what is going on behind the scenes that warrants such a rule. Does discussion derail so often into low level sand-flinging?

                                                                                                                  Not too long ago I was member of a forum focused around LEGO robots. There were no rules of any kind but plenty of electricians and programmers around, men, women, kids and teens, etc. Everyone was happy to participate and be happy to exchange ideas and code. When there was drama the moderators enacted unspoken rules of the clearly obvious kind. If you insulted someone for no reason you got banned. Same for insulting someone based on their gender. We didn’t need rules for that. It was obvious as day that such behaviour was not something you’d do to have a productive conversation with someone about the intricacies of rubber bands vs gearing.

                                                                                                                  1. 8

                                                                                                                    I specifically wonder why number 6 was necessary. It’s a community of coders, if they can’t understand disagreement I seriously question what is going on behind the scenes that warrants such a rule. Does discussion derail so often into low level sand-flinging?

                                                                                                                    Speaking as someone who has over the course of many years, moderated things on the internet. Things like this exist because otherwise someone will come along and say “but you didn’t say”. It’s an unwinabble battle, there will always be a “but you didn’t say” response to something. You try to cover the big things in a broad way so that people have a general idea.

                                                                                                                    I’ve answered many emails as a member of the Pony core team where well meaning people write in to ask “if I do X, would that be against the CoC”. I can’t say that is how every CoC operates, but its how I like them to operate:

                                                                                                                    Here are some ground rules. If you aren’t sure if what you are going to do violates those ground rules, maybe don’t it or ask whoever enforces the CoC.

                                                                                                                    CoC’s are far from perfect. A large amount of that lack of perfection is that they are administered by people. Establishing some ground rules for a community is better than having none. Most communities have a CoC whether they call it that and whether its explicit. Take HackerNews, its called “Guidelines” there. It’s still a statement of some behavior that isn’t acceptable.

                                                                                                                    1. 2

                                                                                                                      I think if someone goes down the route of “but you didn’t say” that would be grounds for getting a mute from the poor moderator they annoyed. At least back in the forum that was how it was handled. Nitpickers aren’t people who tend to keep around once the people in charge hammer them on the fingers.

                                                                                                                      I don’t think Hackernews’ Guidelines are comparable to a Code of Conduct. HN’s book of laws is much more vague and subjective, the word “guideline” already implies a certain amount of softness. Moderators won’t stick to that word-by-word and rather apply common sense on top of the rules. A “Code of X” for me implies a certain rigidness and thoroughness that isn’t present in most of them.

                                                                                                                  2. 14

                                                                                                                    The code of conduct doesn’t say anything about how white men are bad.

                                                                                                                    And yet that is how it has been applied. The organisation is funding a scholarship which is very explicitly open to people of some race/gender combinations and not others. I don’t think finding that unconscionable makes someone an “asshole”; quite the opposite.

                                                                                                                    I wish I could explain to people who are privileged one way or another, that it doesn’t mean your entire life is handed to you in a silver platter. Being a white male doesn’t mean you can’t be poor or can’t be gay (thus discriminated) or that you can’t have a slew of other problems.

                                                                                                                    It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.

                                                                                                                    Put it this way: I would lay money that, in practice, the average Outreachy scholarship ends up going to someone who has had an easier life than the average open-application scholarship (GSoC or similar). The rhetoric of inclusion is all about underprivileged groups, but somehow the beneficiaries always end up being middle-class college-educated liberals.

                                                                                                                    1. 15

                                                                                                                      The organisation is funding a scholarship which is very explicitly open to people of some race/gender combinations and not others. I don’t think finding that unconscionable makes someone an “asshole”; quite the opposite.

                                                                                                                      Races and genders which are significantly unrepresented in the field they are trying to get them into.

                                                                                                                      There are campaigns and organisations here to try and get more male primary school teachers, because males are significantly unrepresented in primary education. Are the people running those organisations and campaigns “assholes” for discriminating against women, who represent over 84% of primary school teachers?

                                                                                                                      1. 4

                                                                                                                        He said although he made hiring decisions based on who was the best teacher, irrespective of gender, it would be great to see more men giving teaching a go.

                                                                                                                        That’s what the non-asshole version of this kind of thing looks like. Marketing the career to a particular demographic is fine. Giving that demographic an unfair advantage is not fine.

                                                                                                                        1. 2

                                                                                                                          It’s an unfair advantage that’s not even managing to negate the pre-existing unfair disadvantages that certain groups face.

                                                                                                                          1. 4

                                                                                                                            It’s Simpson’s paradox in reverse: picking an advantaged member of a disadvantage group over a disadvantaged member of an advantaged group is a negative step for equality that sounds like a pro-equality move.

                                                                                                                      2. 6

                                                                                                                        The outreachies I’ve seen have gone to Indian and Eastern bloc girls. You don’t see a lot of those in GSoC.

                                                                                                                        1. 4

                                                                                                                          Sure. That doesn’t contradict what I said: that the beneficiaries of these efforts end up being disproportionately people from the international college-educated liberal middle class (a group that’s far more homogenous in the ways that matter than most races or genders, though that’s a separate discussion), people who have had an easier life with fewer problems than the people they are displacing, even when those people are white and male.

                                                                                                                          1. 4

                                                                                                                            Let’s assume you’re right.

                                                                                                                            How does Outreachy working with international college-educated liberal middle class Indian and Eastern bloc girls displace anyone?

                                                                                                                            1. 2

                                                                                                                              If LLVM is choosing to fund a scholarship with Outreachy in place of funding one with GSoC, the recipient of that scholarship is displacing the person who would’ve received the GSoC one.

                                                                                                                              1. 9

                                                                                                                                Please correct me if I’m wrong, but as I understand it:

                                                                                                                                • LLVM participates in both Outreachy and GSoC.
                                                                                                                                • LLVM doesn’t fund either programme.
                                                                                                                                  • Outreachy and GSoC both provide funds for their own programmes.

                                                                                                                                So, neither LLVM nor Outreachy are “displacing” anyone from GSoC.

                                                                                                                                Moreover, no one even signed up for LLVM’s Outreachy! So this is hypothetical “displacement.”

                                                                                                                                1. 1

                                                                                                                                  Outreachy doesn’t fund internships, you need to bring your own funding to them. I’m not sure how LLVM is funding their outreachy internships.

                                                                                                                                  1. 8

                                                                                                                                    [citation needed]

                                                                                                                                    Because, from their front page:

                                                                                                                                    Outreachy provides three-month internships for people from groups traditionally underrepresented in tech. Interns are paid a stipend of $5,500 and have a $500 travel stipend available to them.

                                                                                                                                    And their sponsor page:

                                                                                                                                    Outreachy internship stipends, travel fund, and program costs are supported by our generous donors.

                                                                                                                                    Same page, “Commonly Asked Questions”:

                                                                                                                                    Q: Who pays the interns? A: The Outreachy parent organization, the Software Freedom Conservancy, handles payments to interns.

                                                                                                                                    Not to make too fine a point:

                                                                                                                                    Q: We have a company internship program. How does that work with Outreachy internships? A: Outreachy internships are completely separate from any other internship program. Outreachy organizers find FOSS communities that are willing to provide mentorship and use corporate sponsorship to fund the internships.

                                                                                                                                    1. 1

                                                                                                                                      I guess I don’t see how you’re disagreeing with what I wrote. You need to have funding arranged before you can set up an outreachy internship.

                                                                                                                                      1. 4

                                                                                                                                        FOSS community provides mentorship. Corporate sponsor provides funding. Internship = mentorship + funding. Outreachy provides internships.

                                                                                                                                        The money from corporate sponsors goes into a pool that is used for all internships. Outreachy is a funds aggregator.

                                                                                                                                        When you say “you need to bring your own funding to them,” who is the “you?” It’s not the FOSS community. It’s not the internship applicant. Who is it?

                                                                                                                                        1. 1

                                                                                                                                          Perhaps the policy changed. When I looked this up in November it was the responsibility of whoever wanted to start an outreachy program for a project to identify a source of funding.

                                                                                                                                          1. 2

                                                                                                                                            According to the Internet Archive, in September of 2017, their policy was exactly the same. It’s the same at least back through the last GNOME Outreachy, over a year ago.

                                                                                                                                            Update: I deleted my follow-on questions. This is the kind of back and forth @pushcx warned about.

                                                                                                                                            1. 2

                                                                                                                                              Did you see my other comment? Each org needs to find a coordinator who needs to find funding for their org (see under coordinator, here: https://www.outreachy.org/mentor/). That might be in terms of corporate sponsorhip, but outreachy won’t do that for you.

                                                                                                                                              1. 2

                                                                                                                                                No I didn’t, I missed your self-reply. Sorry about that!

                                                                                                                                                And, yeah:

                                                                                                                                                Coordinator Duties Before Application Period Opens

                                                                                                                                                • Finding funding for at least 1 intern ($6,500)

                                                                                                                                                That’s clear and conflicts with their other pages. “Perhaps the policy changed” indeed. I put more weight on that page, though, than their more advertise-y ones.

                                                                                                                                                mea culpa!

                                                                                                                                  2. 1

                                                                                                                                    I understood LLVM was funding the scholarship but could easily have misunderstood. In any case it’s beside the point: my point goes through exactly the same if we’re talking about the person a hypothetical open-application scholarship would have selected or a person who was displaced as such.

                                                                                                                                    Moreover, no one even signed up for LLVM’s Outreachy! So this is hypothetical “displacement.”

                                                                                                                                    Isn’t it just the opposite? If choosing to offer an Outreachy scholarship rather than some other scholarship meant that instead of getting a likely-less-privileged individual they got, not a more-privileged individual but no-one, that’s an even bigger loss.

                                                                                                                                    1. 1

                                                                                                                                      If choosing to offer an Outreachy scholarship rather than some other scholarship […]

                                                                                                                                      They also offer a GSoC scholarship, and there’s nothing to imply Outreachy replaced an alternative rather than being an addition.

                                                                                                                                      1. 0

                                                                                                                                        Scholarships don’t grow on trees; surely the fairest comparison to make is offering a scholarship versus offering a slightly different scholarship. (Would you apply the same reasoning if someone wanted to offer a scholarship that was only for white people, say?)

                                                                                                                                        1. 3

                                                                                                                                          I can play this game too, where “displaced” is entirely hypothetical:

                                                                                                                                          • LLVM has displaced compiler developers from gcc!
                                                                                                                                          • My drinking tea tonight displaced a purchase of beer from the bar down the road!
                                                                                                                                          • My mother and father each displaced every other person on the planet born before 1980!

                                                                                                                                          THE INJUSTICE

                                                                                                                                          1. 1

                                                                                                                                            Um, yes, it’s 100% fair to compare gcc to llvm, tea to beer, or your mother and father to other people?

                                                                                                                        2. 8

                                                                                                                          It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.

                                                                                                                          That’s incorrect in any environment where whites or men are the minority. Human nature dictates that all groups favor those like them and penalize those unlike them. Examining the politics of non-white nations in World History or current affairs confirm those groups are just as racist in the social systems they create. Examining the actions of black administrators or elected officials show they mostly bring in people like them regardless of what the mix is in their area. The kind of political beliefs behind these Codes of Conduct and privilege assume this doesn’t happen on a large scale by non-whites to whites. The wealth of evidence disagrees with that so strongly that believing in it anyway and suppressing alternative views is comparable to a religious faith. One that damages specific groups while propping up others.

                                                                                                                          Another point folks in favor of those beliefs and CoC’s never bring up is how many minority members disagree with them. The surveys they usually take are almost never worded to assess how many people believe it’s something all groups do to each other. That’s because they’re biased enough to try to just reinforce their own beliefs. In my surveys, I always present both sides asking which they think it is. I rarely meet black or Latino people, majority of minority members in my area, that think structural oppression is only a white thing. It’s so rare out here. Most think all groups do it but that whites are doing it the most. That’s reasonable. Yet, under CoC’s and associated beliefs, their views would be censored as well since they’d be construed as racist (in their definition) or contributing to reinforcement of it. Likewise, any “language” or “terms” that are racist, sexist… scratch that, which their political beliefs without supporting evidence label as inherently racist, sexist, etc. That too.

                                                                                                                          So, I object to these CoC’s that act like a good chunk of minority members’ opinions don’t matter, that ignore the fact that minorities do structural racism/sexism all the time (by default like people in general?), ignore the fact that whites/men they’re addressing might have been the oppressed minority in previous environment (or current), and then build social structures and enforcement mechanisms on top of those damaging, faith-based beliefs. I also say this as a white guy who spent years in black-run schools living a long time in many areas of black-run city working in black-run departments and companies. If I write about my experiences or tell it like a 3rd party, the black people always think the person in the story is black saying the feelings and obstacles are what they endure. When I say they’re white, then type of people I’m countering say, poof!, none of it counts as evidence of racism. That shows it’s politically-motivated maneuvering, not consistent logic.

                                                                                                                          These should be fought in favor of CoC’s that don’t require everyone in America or the World to believe and speak as if one, smaller, vocal group is unconditionally right in all political claims about these matters.

                                                                                                                          1. 14

                                                                                                                            That’s incorrect in any environment where whites or men are the minority. Human nature dictates that all groups favor those like them and penalize those unlike them. Examining the politics of non-white nations in World History or current affairs confirm those groups are just as racist in the social systems they create.

                                                                                                                            I’m sorry, what are you talking about? I’m from Peru where ‘whites’ are a minority. They are most certainly not discriminated against, quite the contrary. Whiteness is equated to privilege to the extent we have a saying here: ‘El dinero blanquea’, which roughly translates to ‘Money bleaches’.

                                                                                                                            The discrimination comes from factual power, not a head count. Power which was built upon centuries of enslavement and exploitation. Exploitation most members of the white elite minimize and/or are oblivious to.

                                                                                                                            It is the same in other places of South America. Certainly in Brazil, where the author is from.

                                                                                                                            1. 6

                                                                                                                              I’m from Peru where ‘whites’ are a minority. They are most certainly not discriminated against, quite the contrary. Whiteness is equated to privilege to the extent we have a saying here: ‘El dinero blanquea’, which roughly translates to ‘Money bleaches’.

                                                                                                                              I appreciate you sharing your example where one of the minorities has power. That supports my view that it’s highly conditional. Power is one thing that ties into discrimination. Group identity is another. You don’t need centuries of enslavement or exploitation to get one group working for themselves more or against another. It can be a factor, though. Often is. I also noticed you’re mentioning countries where white armies invaded them and their upper classes, not whites in general, did coercive negotiations for trade that benefits them. In this case, it’s real but tied to who did what. You can bet a group invaded by non-whites will also develop some reaction to that group.

                                                                                                                              Whereas around Memphis TN, being white in specific areas won’t get them respect or power due to the slavery that happened in the South. They’ll just get a warning to leave, beat down, robbed, and/or killed. No power. Like with those that invaded Latin America, the power was with a subset of them in high places or any that could get them to act on their behalf. As a civil rights proponent in America, I assure those powerful, white people would try to squash or minimize white people like me when our interests conflict. They hate outsiders even more but I would be treated more like them than your scenario would lead you to expect. I’m still in the outgroup. Just not as far out as Latin America. Same with local blacks or latinos that control specific areas, organizations, businesses, and so on. Being white conveys me large benefits in some contexts, about none in others, kind of negative in others, and violence/death in others.

                                                                                                                              It varies by context is my overall point. It’s not “If white, always this. If non-white, always that.” It’s really complicated. I’m sure I have plenty more to learn about the dynamics of the many groups. Thing is, countering it my way is much simpler than trying to trace it all: being civil, going out of your way to bring in others, accepting each other despite differences, and randomizing/blinding where possible selections/promotions. Increased fairness without further discrimination or hate. It’s simple, but not easy.

                                                                                                                              Edit to all: Other replies will be delayed since I have to work a late shift tonight. Heading out now. Hope yall have a good day and appreciate all the civil replies so far. :)

                                                                                                                              1. 4

                                                                                                                                Thank you for the thoughtful response. I get a better sense of what you were getting at. I don’t think I’m qualified to say much more on the matter, I don’t think I have a proper grasp of the dynamics of structural exploitation. But I’d like to add a couple of not fully developed ideas.

                                                                                                                                – Whiteness is sometimes used as a proxy for privilege.

                                                                                                                                – Whiteness is context dependent. My cousin from the US grew up on Pensilvania. Here he is a ‘gringo’, where he grew up he was considered far from white, being called racial slurs when growing up.

                                                                                                                                – It may be a better idea to talk more in other terms w/o proxies. Class politics are more relevant today than race IMHO.

                                                                                                                                – Even in Perú there are some contexts where you can be subject to specific instances of discrimination, but they pale in comparison to the structural discrimination that happens in the day to day basis. Which is why (in the context of Latin America at least) I view focusing on ‘reverse racism’ as a mechanism to distract from the larger and more important problem of structural discrimination.

                                                                                                                                also noticed you’re mentioning countries where white armies invaded them and their upper classes, not whites in general, did coercive negotiations for trade that benefits them.

                                                                                                                                I understand and empathize and partially agree with what you are getting at. Certainly you can’t be held personally accountable for everything action your government does. But at the same time they have to some extent the support of the general public. At best, you are turning a blind eye to the pain and suffering that supports your economy. But then again, it is our (Latin American) governments which are complicit and also responsible for said exploitation.

                                                                                                                                I’m the words of a mining worker, when talking to a college student:

                                                                                                                                – You speak of the gringos you’ve seen in Morococha and Cerro (Mines in Perú). But they are millions. Don’t generalize…

                                                                                                                                – So why do they send those how look down on us, cholos, not like people but like dogs.

                                                                                                                                Another thing, the exploitation of Latin America is not limited to ‘economic deals’ and is not something of the past (But there is more than a fair share to blame on our obsequent governments). In the 90’s US Companies hired henchmen to kill union leaders. The US Goverment (through US-‘AID’) provided logistic support for the mass forced sterilization of millions of women in Perú. Or even this decade, the US government, through the DEA, determines the policy and funds the forceful eradication of coca leaves further contributing to the impoverishment of Peruvian farmers. The Coca plant is legal here and is consumed by many in their day to day.

                                                                                                                                1. 1

                                                                                                                                  I thank you for your detailed response. That was a mix of interesting and pretty sad. I’m going to back up a bit first on one issue since I was using a simplification that you and @stephenr are showing I probably shouldn’t use maybe here or in general. I’ll have to think on it. The actual belief I have about the ingroup vs outgroup dynamic is that they’re just treated differently in a way where it’s often positive to first and negative to second. It doesn’t have to be. I was just going with common pattern since it fits both my experiences and minorities in the U.S. which is mostly the topic around this thread. You’ve both given examples where a white outgroup can be benefit from their status in other countries. Likewise, there’s examples where the ingroup is a rough position with expectations for man or women coming to my mind easiest. One of the worst examples I’ve seen is the tribe that covers people in bullet ants to prove they’re men. I’d rather be the outgroup they look down on forever. ;)

                                                                                                                                  On to your comments on exploitation. Far as unions, sterilization, and so on, that’s a side effect of the elites controlling America. They use the media to keep folks under control fighting enemies that aren’t the main enemy. You won’t see the stuff you described on American media much. Instead, it’s stuff that shocks or lets people point fingers temporarily for quick reactions. Next wave of shock happens making them forget what came before that. Americans can’t keep track of history. They can only focus collectively a moment at a time with what’s carefully put in front of them. The parts of the government doing things like you describe are mostly autonomous working for rich and powerful. Those that get voted in do a mix of things they said they’d do and things that appear to benefit their voters with lots of publicity for both. The choices are few with the non-participation and apathy so high that government doesn’t worry about rebellion. It’s kind of a constant rehash of the same games and corruption with businesses getting laws passed benefiting them more and more every year mostly under Americans’ noses since media barely reports on it.

                                                                                                                                  So, that’s how that works if you were wondering. When I was young, I never thought handfuls of companies and some government organizations could really control most of several hundred million people with the presence of the Internet, activists getting word out, and so on. Yet, they actually can. They’re also intelligent, focused, well-staffed, and relentless in their pursuits vs masses that are hit and miss on these things with more scattered beliefs, goals, and participation. Just like in this, those fighting over the CoC’s and such aren’t investing effort in joining together against the elites like folks did in MLK days which truly scared them enough to plot murders. If they beat the corruption, they could work law by law, reg by reg, case by case to get a lot done starting with something as simple as due process for workers (I’m union). It takes unity and focus on where the foundational problems are, though, to achieve something like that. Not to knock efforts to improve things elsewhere but we really should be almost all in on dealing with people paying bribes for damaging laws to be passed that give corrupt jurisdictions and companies impunity in their evils. It seems like so much starts right there.

                                                                                                                                  Anyway, there’s a lot of people pulling for the folks you describe. They just feel powerless to do anything about it. Also, those that care are so few that giving up products that come from there will change nothing. So, everyone from the consumers to the traders ignore their fleeting thoughts since they need some cheap copper.

                                                                                                                            2. 13

                                                                                                                              I’m not sure how anything you’ve written is relevant to LLVM’s code of conduct. It says; be welcoming of everyone, be considerate, be respectful, don’t make violent threats. All very basic, common sense stuff that the vast majority of people don’t need to a checklist to accomplish. I’m not sure how you went from what is actually written there, to this:

                                                                                                                              The kind of political beliefs behind these Codes of Conduct and privilege assume this doesn’t happen on a large scale by non-whites to whites.

                                                                                                                              Which part of LLVM’s CoC do you think is saying this? Do you think the part about being welcoming of everyone regardless of race is non-white people discriminating against white people?

                                                                                                                              1. 8

                                                                                                                                “Violent threats or language directed against another person. Discriminatory jokes and language. especially those using racist or sexist terms Advocating for, or encouraging, any of the above behavior.” (my emphasis added)

                                                                                                                                It’s those words that are used to block people based on political beliefs. The kinds of people that push CoC’s often have specific views about what is considered racist, sexist, etc that there’s not a wide consensus on. Any words or behavior will be interpreted in the light of their views. This is double true when they get into the moderation positions, which they often aim for. I don’t have to speculate as I’ve been banned from forums for quoting under my own name minority member’s opinions on minority issues. They were racist, sexist, etc. by their definitions. These policies interpreted however they want are the leverage they use to reinforce their own groups or eject other groups. Advocating for is the last term where anyone even debating whether something was racist or sexist might be construed as supporting the racist or sexist person. That’s happened plenty, too.

                                                                                                                                So, it’s the intent behind the terms along with whose enforcing them, what their beliefs are, and if they’re willing to exclude people with different beliefs on contentious topics. They usually are. So, I oppose those in favor of CoC’s without enforcement of political ideology that focus on people just staying civil, friendly, etc. Those parts of the CoC’s I have no problem with.

                                                                                                                                EDIT to add what I’m fine with since I’d rather not be overly critical of something that’s mostly good:

                                                                                                                                “be friendly and patient, be welcoming, be considerate, be respectful, be careful in the words that you choose and be kind to others, and when we disagree, try to understand why.”

                                                                                                                                Most of the weaseling is built into that “be careful in the words you chose” part. Minus the weaseling, even quite a few points in that section are good. Also note that we don’t have to speculate given Lobsters already has enforcement that’s similar to what I’m advocating for. Our moderators may agree or disagree with people’s political views but haven’t ejected anyone for stating their views with data in a civil way. Our community is still a thriving, functioning community despite any political scuffles.

                                                                                                                              2. 11

                                                                                                                                That’s incorrect in any environment where whites or men are the minority.

                                                                                                                                I guess you’ve never been to Thailand. Whites are a ridiculous minority, but they’re held in such high regard by a large percentage of the population.

                                                                                                                                Edit: and to clarify, this isn’t the same situation as @PuercoPop’s:

                                                                                                                                Thailand was never colonised, has never been under ‘white’ or ‘western’ rule and was not a ‘source’ for slavery by whites, Heck, whites (without getting Thai citizenship, which, holy shit is that a long process) can’t own land, can’t own more than 49% of a company, etc.

                                                                                                                                Try to find some Thai soap operas on YouTube - notice how all the actors are very pale skinned: they’re all half-Thai, half-white. If they want to show a ‘poor brown girl’ (believe me, their stereotype, not mine) they literally take a Thai/White actress, and use makeup/body paint/whatever to show their version of what anyone else would think of as a ‘natural’ brown skin.

                                                                                                                                I’ve been stopped at police licence checkpoints, and the cop has been so excited just to say hello to a white guy he doesn’t even care if I have a licence.

                                                                                                                                1. 4

                                                                                                                                  Of course structural oppression isn’t a white only thing. Anyone can discriminate against anyone. And sure, in localized areas some groups can oppress others in different ways than the average. That doesn’t mean CoCs shouldn’t try to prevent racist / sexist conduct.

                                                                                                                                  What things do you see in CoCs that minority members disagree with, that unfairly construes their beliefs as racist? Or disregards their opinions? Or ignores that whites/men may have been the oppressed minority in their environment?

                                                                                                                                  1. 4

                                                                                                                                    That doesn’t mean CoCs shouldn’t try to prevent racist / sexist conduct.

                                                                                                                                    I didn’t say that. I said it’s usually interpreted in a way where racist and sexist conduct has definitions that usually mean whites/males can’t experience the negatives, are often responsible for them (supported point in general case), and inherently have the positives. Evidence strongly counters two of those showing it has to be judged case by case, place by place, etc. For instance, the forums dominated by the types of people with that ideology make them the majority with the structural power to include, exclude, oppress, and so on. By their own definitions this is true. Yet, any person in a different group dissenting in such a place will be told they’re the “majority” with “privilege” who wouldn’t understand the… blah blah blah. Actually, at least in that context, they’re a minority getting treated worse than its majority at risk of damaging affects of discriminatory treatment. This plays out in other contexts like school, work, etc. where non-whites or non-males in the majority positions reinforce themselves at others expense. A general pattern.

                                                                                                                                    Far as minority members disagree with, who are the minority members? That’s exactly what I mean. It depends on who you’re talking about in what context. Someone who is a minority member in one environment might be part of the privileged majority in another. The very definitions of who constitutes a minority (absolute vs conditional), what defines racism, who has privilege… these are in dispute across the nation. Many non-white and non-males dispute some of same points, too. So, starting from a specific set of views on it being true with enforcement working from there is already discriminating against all who disagree. They’ve not proven these views with evidence either.

                                                                                                                                    Note: You can try to cheat with legal terms that one side or a group of them got in but treating the law as truth or moral is dangerous. Slavery and women not having rights were legal. So, my definitions are about reasonable categories people are in with their numbers or influence compared to groups of other categories.

                                                                                                                                    The evidence collected on a global scale indicates that all groups in power reward their own and oppress others. So, if by evidence, this stuff will be conditional with every group monitoring themselves for bias boosting their outgroups when they don’t get a fair shake: not just whites or males being monitored with everyone boosting non-whites or non-males in all scenarios. In this country or in tech scene, the results would mostly be boosting non-whites or non-males to correct existing imbalances just on the numbers alone. No argument there. Yet, other things wouldn’t be taboo or inconsistent with the rules: a mostly black or women organization in mixed area with people in other categories having skills would be said to give more privilege to blacks/women, possibly structurally racist/sexist in hiring if ratios of workers vs supply were really skewed, encouraged to diversify, and activist action taken if they didn’t. Just like such people would do with white or male majority structurally reinforcing their own groups.

                                                                                                                                    We don’t see this. Most of the types that push and want to enforce CoC’s frame it as one thing by definition with whites or males on high-privileged/victim-creating side in all situations. That’s dishonest. I’ll take “this happens more often than that” but not “this never happens or we should act like it doesn’t exist.” With that, they can’t eject people for disagreeing with them on what counts as discriminatory language or behavior if it’s something there’s no consensus on by people who otherwise are against a lot of clearly-discriminating behavior. Further, they might be more likely to go with diverse inclusion plus blind evaluation/selection to correct imbalances instead of ignore whites/males much as possible to only focus on everyone else. One is inherently more fair achieving a similar goal.

                                                                                                                                    1. 2

                                                                                                                                      But don’t you think that being the privileged majority in the society you live in will have more to do with shaping your experience and fortune in the world than being the privileged majority in an online message board or OSS project?

                                                                                                                                      1. 3

                                                                                                                                        In the spaces I live with, my lack of privilege as a white minority in many contexts has cost me likely mental health, plenty humiliation, confusion, physical beatings, missed dates, missed jobs, missed promotions, and so on. Coworkers locally were just telling me recently about black-run classes singling them out for opposing beliefs. Things they say get an entire room screaming at them to intimidate them into silence on top of whatever penalties teacher might give. More extreme versions of this ideology are going campus to campus all over the place taking on life of their own where students are doing things like holding up signs protesting inferred problems in words or ideas of instructors that are there to help them during class.

                                                                                                                                        Again, I”m white male who doesn’t or can’t have such problems in a structural way according to specific groups in the United States despite the evidence of such things happening with non-white or non-male majorities. The forum example was just easier for people to see where you can tell the white male is not in control, is subject to the whims of others, and can be damaged for that. People causing outgroups problems is totally predictable in my model. That’s not the interesting thing. The interesting thing about the forum example is that the people in control who are the majority continue to describe their limited, powerless target in the same terms like powerful and majority. It doesn’t usually change as the circumstances change. It’s usually politics or religion when people’s beliefs or dictated rules don’t change when data flips by 100%.

                                                                                                                                        So, it’s not what they say it is or consistent. That’s enough reason to resist it. That following it would damage more innocent whites or males making them suffer as so many of us did is even more reason. You could say what motivates me to write these posts isn’t much different as what motivates those on the other side with personal experiences in racism or sexism to write their posts. It’s not “reverse (ism)” so much as all the same evil to me. Once we see and experience the evils, we have to stop them from continuing in any form they’ll take. Another thing I noticed is we seem to do it for others’ sake more than ourselves as we can’t undo what we experienced. We’ll always be a bit fucked up by it. We can maybe stop someone else from having to experience that, though. I want someone else to be everyone instead of “everyone but whites and males.”

                                                                                                                                        As usual, that’s on top of all the non-whites and non-males I care about and try to help. They just get a lot more attention and support than this other cause. Hence it being a focus area you’ll see me on. Plus, having been affected so strongly, that’s a motivational bias of mine on top of it.

                                                                                                                                        1. 4

                                                                                                                                          @nickpsecurity, that sucks. You’ve been a victim of structural discrimination. Worse, because it’s not a politically sexy or easily visible form, people continually reject your experience. That. Sucks.

                                                                                                                                          In the past, if I’d heard your narrative, I’d have dismissed you by thinking something like “this white dude forgets he always has the option to leave, unlike …” But that’s unfair.

                                                                                                                                          You’ve been a member of these communities, for years. You’ve been a decent person. You have family, friends, colleagues, social capital, and memories in these communities. To tell you “get up, leave, move on” is to ignore the simple reality that we’re social animals and structural discrimination harms everyone.

                                                                                                                                          Thank you for your repeated posts on this point. At the very least, you got through my thick head. Hopefully, in the future, I can be a better person for it.

                                                                                                                                          1. 2

                                                                                                                                            Damn. That means a lot to me you saying that. I sent a private message not long ago about your comments being interesting as usual on these discussions. More than usual with one comment about you getting beat up for talking white to presumably get ahead whereas I was learning early to talk or act black to attempt inclusion in my environment. It’s because some of what you wrote seems like you might have started in similar circumstances as me going in an opposite direction to find yourself with opposite views. Maybe a stretch to say two sides of same coin but that metaphor popped into my head at least. Then, we end up here in this moment on this forum. A trip, eh?

                                                                                                                                            It’s why I fight for flexibility on these topics in these discussions in wherever places I can. It’s painful and costly but the moments I learn from or reach people are worth it to me. I think those moments are critical. Probably gotta get to sleep now as I intended to. I just had to respond to that comment. :)

                                                                                                                                            Edit: Oh yeah, sleepy enough I forgot to say Good Night.

                                                                                                                              3. 16

                                                                                                                                demonization of political groups (and to some extent, white men)

                                                                                                                                I’m a white man in tech and I can count the number of times I’ve been demonized on zero fingers.

                                                                                                                                demonization of political groups

                                                                                                                                The dominant political party in this country has in black and white in its party platform a desire to make same-sex marriage illegal (while simultaneously claiming “government overreach” is a bad thing). If hearing that we shouldn’t punish gay people just for being gay makes you uncomfortable, well…it’s supposed to.

                                                                                                                                (That same party has in its platform a denial of anthropogenic climate change, an existential threat to our civilization; the denial of which has zero scientific backing….but no, we can’t tell them that they’re wrong.)

                                                                                                                                More importantly, the stuff I’m talking about above is also banned. You can’t go to a conference and talk about how “Republicans are stupid”. You’d be asked to leave or at least tone it down.

                                                                                                                                The problem is that a lot of people hear “don’t be an asshole” and they think “man when I tell transgender folks they’re stupid and make jokes about gay people I get called an asshole (totally unjustifiably!) and I might get in trouble. Ugh, SJW’s!”

                                                                                                                                Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/

                                                                                                                                I’ve been on the Internet since around 1992. That’s only three years after the very first consumer ISP served its first customer.

                                                                                                                                Was there a large contingent of people who really did believe that? Absolutely, I mean, I was one of them. Were there plenty of racists, sexists, homophobes, and bigots of all stripes? Absolutely. Go look at old Usenet archives from the 80’s and 90’s. Racism, sexism, homophobia abound. There was a long diatribe against same-sex marriage on a Perl newsgroup for some damn reason around 1996; there were plenty of people who chimed in and agreed. Various big names in the early hacker community were famously bigoted (often hiding behind “libertarianism” while simultaneously claiming women and black folks are just inherently inferior and it’s “just science”).

                                                                                                                                The “good old days” are very often viewed through rose-colored glasses. People were people back then too, for all the good and the bad.

                                                                                                                                1. 16

                                                                                                                                  Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/

                                                                                                                                  This was never true. People on the internet have always cared about who you are in ways that factor these things in. The fact that the (largely white) nerd culture contingent who had a lot of influence on the early internet has decided to tell this utopian story does not make it any more true than stories your grandpa tells about respectful children and walking both ways uphill in the snow.

                                                                                                                                  1. 23

                                                                                                                                    It’s less that “No one cared what you looked like” and more “Everyone assumed you were a white dude with roughly conformal beliefs, behaviors, and similar.”

                                                                                                                                    1. 3

                                                                                                                                      There’s no contradiction. Both those things were true.

                                                                                                                                  2. 12

                                                                                                                                    Remember when no one on the internet cared what you looked like, believed, or who you loved?

                                                                                                                                    And look where it got us. Toxic subcultures, huge gender inequality in the workplace, software products that simply don’t work for many groups people… The field was biased towards white male hackers from the very beginning, and “not caring” only increased this bias. No, I don’t want to go back to that, I want to fix it.

                                                                                                                                    Updated:

                                                                                                                                    Also, “no one one the Internet cared what you looked like” simply because they technically couldn’t: nicknames and plain text don’t divulge much. As soon as we got real names and YouTube it became obvious that the majority of people care very much about how you look like. So a young girl making a guitar cover or an Ubuntu installation walk-through mostly gets “you’re hot” and “nice boobs” comments.

                                                                                                                                    1. 16

                                                                                                                                      People with privilege have been getting more and more outraged that the world is discriminating against them. They see it as unfair. Yes, it’s discrimination and that sucks. But it’s infuriating when they paint it as unfair, because that implies they’re somehow being disproportionately discriminated against, that the discrimination is unfairly balanced against them. And of course that’s nonsense. These privileged people, intentionally or not, feel they’re entitled to live free from any and all discrimination at the expense of those less privileged.

                                                                                                                                      Remove yourself from the politics and think about a simple model instead of race, sex, gender, or orientation. Just group A and group B.

                                                                                                                                      • members of group A receive 120 points a day
                                                                                                                                      • members of group B receive 80 points a day

                                                                                                                                      Members of group A develop a belief system that they are entitled to their 120 points. When some members of group B try to increase their points to 85, and that lowers the group A points to 119, the members of group A become angry. They say the members of group B are being unfair.

                                                                                                                                      Group A believes that group B should not take any action that decreases their daily points. Group A compares their loss of 1 point to group B’s initial 40 point deficit, drawing a false equivalency. Some subset of A, group A’ deliberately take points from group B members around them to restore their original 120 points. Group A’ claims this is fair.

                                                                                                                                      Group A’ bands together to institutionalize the 40 point difference. Some extreme members of group A’ even try to widen the 40 point difference. Group A’ comes to believe at an institutional level that the 40 point deficit either doesn’t exist, or is somehow natural and fair. Group A’ believes they hold the moral superiority by defending their 120 points.

                                                                                                                                      Members of group B continue to try to elevate themselves, but A’ demands that all work done by group B must benefit group A’ equally. A’ considers this fair. Groups A and B focus on elevating group B rather than bickering with group A’ about whether 1 equals 40. Some members of both groups A and B institutionalize polite exclusion of group A’ just to simplify the whole thing, because they’re tired of bickering.

                                                                                                                                      A vocal minority demonizes group A’ for their actions. Some members of group A find this demonization troubling. A larger and less vocal group of A and B think group A’ is a bunch of fucking douchebags, and start to actively exclude A’ rather than deal with their asinine bullshit. A surprising amount of group A wonders if this exclusion is fair or reasonable. Group B, and an increasing amount of group A, respond “are you fucking joking my ass what the actual fuck?”


                                                                                                                                      If you’re a member of group A, please try to empathize with group B. Next time you feel discriminated against for your group A membership, take a step back and reflect on how you’re feeling in that moment. Try to imagine what it’s like to feel that way every single day of your life, at work, on the street, or in your own home through the media.

                                                                                                                                      1. 2

                                                                                                                                        But it’s infuriating when they paint it as unfair, because that implies they’re somehow being disproportionately discriminated against

                                                                                                                                        I think there is more to this implication than you’re letting on, because it makes assumptions about what “fairness” actually means from the person wielding the term. You’ve assumed one definition, but perhaps someone else has another in mind. As a nominal example, consider this implication in different ethical frameworks (say deontological or Kantian ethics versus utilitarian). Is it true in all of them? Alternatively, do you dismiss ethical frameworks in which it isn’t true as nonsense or intractable? Either way, those are important assumptions to state, because your entire comment appears to rest on them.

                                                                                                                                        (I do wholeheartedly agree with your final paragraph, but try my best to perhaps apply it as much as possible, with a healthy dose of perspective taking on all sides. I don’t always succeed!)

                                                                                                                                      2. 4

                                                                                                                                        I’m glad to see this trend of standing up against poltiical [sic] exclusion in Open Source.

                                                                                                                                        Me too, I just wish more people would up and leave, instead of stick around and yell about “reverse discrimination” and such. I’m definitely coming at it from a selfish angle (and concern for my friends,) I’m just really tired of people who “disagree” with us existing, at best, and actively harass us at worst. The only way I can participate in open source is anonymously, which means it’s mostly uncredited work. It’s just not worth the toll it takes on my mental health. Of course, whenever possible, I contribute to projects/communities who show that they are aware of these issues, and are actively doing something about it.

                                                                                                                                        Looking forward to the Incorrect, Off-topic, and Troll downvotes.

                                                                                                                                        1. 4

                                                                                                                                          I think it’s a loss when someone who can write code leaves a OSS project. I also think that discrimination, which you refer to as “reverse discrimination” in certain contexts, is bad, end of story. I don’t want anyone to be discriminated against. “Contribute good code” is all I ask off people looking to work with me. Politics are boringly unproductive towards that goal.

                                                                                                                                          1. 4

                                                                                                                                            I think it’s a loss when someone who can write code leaves a OSS project.

                                                                                                                                            I don’t, if they keep other people away who can also write code. I honestly can’t understand what’s wrong with participating in this, unless you believe (actual) discrimination isn’t real.

                                                                                                                                            1. 2

                                                                                                                                              I do believe actual discrimination is real but I think discriminatory internships aren’t the solution as they only lead to problems down the road. It’s great that outreachy is doing it and I believe they honestly think it’s the correct solution but I simply can’t agree on that.

                                                                                                                                      1. 6

                                                                                                                                        Nice! While we’re sharing…

                                                                                                                                        Unicode has an exceptionally well hidden but quite useful tool for exploring sets of Unicode codepoints. e.g., To see all codepoints in the greek script: https://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7BGreek%7D&g=&i=

                                                                                                                                        Or see all codepoints in the Greek script that aren’t in the Letter general category (well, technically, not in the Lu | Ll | Lt | Lm | Lo general categories): https://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7BGreek%7D%26%5CP%7BLetter%7D&g=&i=

                                                                                                                                        You can also just grab the Unicode table directly from unicode.org and grep that:

                                                                                                                                        $ curl https://unicode.org/Public/10.0.0/ucd/UnicodeData.txt > /tmp/unicodetable
                                                                                                                                        $ grep -i apl /tmp/unicodetable
                                                                                                                                        

                                                                                                                                        Of course, the output isn’t as nice as @Sietsebb’s, since UnicodeData.txt contains lots of other junk. :-)

                                                                                                                                        1. 2

                                                                                                                                          Ooh, that is indeed nice. I had a look at the query docs, and the query language reminds me of Mercurial’s revsets or filesets – property-based querying is a delightful thing. (That was also one of the things I liked most in Gmail, back when I started: that I could type from:myfriend has:attachment, instead of having to click through dropdowns and ‘add a line’ buttons in a query dialog box.)

                                                                                                                                          You can also just grab the Unicode table directly from unicode.org and grep that […] the output isn’t as nice

                                                                                                                                          Actually, I might end up needing to use that in the future, seeing how isthatforreal pointed out in another reply that Name.pl is on course to disappear without warning. Thanks for pointing it out!

                                                                                                                                          1. 3

                                                                                                                                            Ah, here are the docs for UnicodeData.txt: https://www.unicode.org/reports/tr44/tr44-20.html#UnicodeData.txt

                                                                                                                                            Browsing unicode.org is bewildering at first, and often the hardest part is figuring out how to know what you’re looking for. Once you find the thing you’re looking for though, the docs are generally great!

                                                                                                                                            1. 4

                                                                                                                                              Your remark reminded of Cory Foy’s tweet:

                                                                                                                                              Keep thinking about how valuable it would be for development organizations to have a librarian. There’s often so much institutional knowledge in wikis, comments, shared drives, but so little thought to organization and discoverability.

                                                                                                                                        1. 10

                                                                                                                                          I enjoyed this, but it did make me wonder – what would a true low-level language designed today actually look like? I’ll hang up and take your answers over the air.

                                                                                                                                          1. 5

                                                                                                                                            If I’m reading the article’s premise properly, the author doesn’t even consider assembly language to be ‘low level’ on modern processors, because the implicit parallel execution performed by speculative execution is not fully exposed as controllable by the programmer. It’s an interesting take, but I don’t think anybody other than the author would use “low level” to mean what he does.

                                                                                                                                            That said, if we were to make a language that met the author’s standards (let’s say “hardware-parallelism-transparent” rather than “low-level”), we’d probably be seeing something that vaguely resembled Erlang or Miranda in terms of how branching worked – i.e., a lot of guards around blocks of code rather than conditional jumps (or, rather, in this case, conditional jumps with their conditions inverted before small blocks of serial code).

                                                                                                                                            People later in the thread are talking about threading & how there’s no reason threading couldn’t be put into the C standard, but threading doesn’t appear to be the kind of parallelism the author is concerned about exposing. (To be honest, I wonder if the author has a similarly spicy take on microcode, or on firmware, or on the programmability of interrupt controllers!)

                                                                                                                                            He seems to be saying that, because we made it easy to ignore certain things that were going on in hardware (like real instructions being executed and then un-done), we were taken off-guard by the consequences when a hole was poked in the facade in the form of operations that couldn’t be hidden in that way. I don’t think that’s a controversial statement – indeed, I’m pretty sure that everybody who makes compatibility-based abstractions is aware that such abstractions become a problem when they fail.

                                                                                                                                            He suggests that the fault lies in not graduating to an abstraction closer to the actual operation of the machine, which is probably fair, although chip architectures in general and x86 in particular are often seen as vast accumulations of ill-conceived kludges and it is this very bug-compatibility that’s often credited with x86’s continued dominance even in the face of other architectures that don’t pretend it’s 1977 when you lower the reset pin and don’t require trampolining off three chunks of arcane code to go from a 40 bit address bus and 16 bit words to 64 bit words.

                                                                                                                                            People don’t usually go as far as to suggest that speculative execution should be exposed to system programmers as something to be directly manipulated, and mechanisms to prevent this are literally part of the hardware, but it’s an interesting idea to consider, in the same way that (despite their limitations) it’s interesting to consider what could be done with one of those PPC chips with an FPGA on the die.

                                                                                                                                            The quick and easy answer to what people would do with such facilities is the same as with most forms of added flexibility: most people will shoot themselves in the foot, a few people would make amazing works of art, and then somebody would come along and impose standards that limit how big a hole in your foot you can shoot and it’d kill off the artworks.

                                                                                                                                            1. 4

                                                                                                                                              Probably a parallel/concurrent-by-default language like ParaSail or Chapel with C-like design as a base to plug into ecosystem designed for it. Macros for DSL’s, too, since they’re popular for mapping stuff to specific hardware accelerators. I already had a Scheme + C project in mind for sequential code. When brainstorming on parallel part, mapping stuff from above languages onto C was the idea. Probably start with something simpler like Cilk to get feet wet, though. That was the concept.

                                                                                                                                              1. 1

                                                                                                                                                Or maybe it would look like Rust.

                                                                                                                                                1. 8

                                                                                                                                                  The article’s point is that things are parallel by default at multiple levels, there’s different memories with different performance based on locality, orderings with consistency models, and so on. The parallel languages assume most of that given they were originally designed for NUMA’s and clusters. They force you to address it with sequential stuff being an exception. They also use compilers and runtimes to schedule that much like compiler + CPU models.

                                                                                                                                                  Looking at Rust, it seems like it believes in the imaginary model C does that’s sequential, ordered, and so on. It certainly has some libraries or features that help with parallelism and concurrency. Yet, it looks sequential at the core to me. Makes sense as a C replacement.

                                                                                                                                                  1. 3

                                                                                                                                                    But, Rust is the only new low-level language I’m aware of, so empirically: new low-level languages look like Rust.

                                                                                                                                                    Looking at Rust, it seems like it believes in the imaginary model C does that’s sequential, ordered, and so on.

                                                                                                                                                    To be fair, the processor puts a lot of effort into letting you imagine it. Maybe we don’t have languages that look more like the underlying chip is because it’s very difficult to reason about.

                                                                                                                                                    Talking out of my domain here: but the out of order stuff and all that the processor gives you is pretty granular, not at the whole-task level, so maybe we are doing the right thing by imagining sequential execution because that’s what we do at the level we think at. Or, maybe we should just use Haskell where order of execution doesn’t matter.

                                                                                                                                                    1. 3

                                                                                                                                                      How does rust qualify as “low level”?

                                                                                                                                                      1. 1

                                                                                                                                                        From my understanding, being low-level is one of the goals of the project? Whatever “low-level” means. It’s certainly trying to compete where one would use C and C++.

                                                                                                                                                        1. 3

                                                                                                                                                          But does rust meet the criteria for low level that C does not (per the link)?

                                                                                                                                                          1. -1

                                                                                                                                                            The Rust wikipedia page claims that Rust is a concurrent language, which seems to be a relevant part of the blog. I don’t know if Rust is a concurrent language, though.

                                                                                                                                                            1. 3

                                                                                                                                                              I think you’re probably putting too much faith in Wikipedia. With that said, I must confess, I have no insight into the decision procedure that chooses the terms to describe Rust in that infobox.

                                                                                                                                                              One possible explanation is that Rust used to bake lightweight threads into its runtime, not unlike Go. Go is also described as being concurrent on Wikipedia. To that end, the terms are at least consistent, given where Rust was somewhere around 4 years ago. Is it possible that the infobox simply hasn’t been updated? Or perhaps there is a turf war? Or perhaps there are more meanings to what “concurrent” actually signifies? Does having channels in the standard library mean Rust is “concurrent”? I dunno.

                                                                                                                                                              Rust has stuff in the type system to eliminate data races in safe code. Separate from that, there are some conveniences that help avoid deadlock (e.g., you typically never explicitly unlock a mutex). But concurrency is definitely not built into the language like it is for Go.

                                                                                                                                                              (I make no comment on Rust’s relevance to the other comments in this thread, mostly because I don’t give a poop. This navel gazing about categorization is a huge unproductive waste of time from my perspective. ’round and ’round we go.)

                                                                                                                                                              1. 1

                                                                                                                                                                Pretty sure having a type system designed to prevent data races makes Rust count as “concurrent” for many (including me).

                                                                                                                                                                1. 3

                                                                                                                                                                  The interesting bit is that the type system itself wasn’t designed for it. The elimination of data races fell out of the ownership/aliasing model when coupled with the Send and Sync traits.

                                                                                                                                                                  The nomicon has some words on the topic, but that section gets into the weeds pretty quickly.

                                                                                                                                                                  1. 1

                                                                                                                                                                    I see where you are going with that. The traditional use of it was expressing concepts in a concurrent way. It had to make that easier. The type system eliminates some problems. It’s a building block one can use for safe concurrency with mutable state. It doesn’t by itself let you express things in a concurrent fashion easily. So, they built concurrency frameworks on top of it. A version of Rust where the language worked that way by default would be a concurrent language.

                                                                                                                                                                    Right now, it looks to be a sequential, multi-paradigm language with a type system that makes building concurrency easier. Then, the concurrency frameworks themselves built on top of it may be be thought similar to DSL’s that are concurrent. With that mental model, you’re still using two languages: a concurrent one along with a non-concurrent, base language. This is actually common in high assurance where they simultaneously wrote formal specs in something sequential like Z and CSP for concurrent stuff. The concurrent-by-default languages are the rare thing with sequential and concurrent usually treated separately in most tools.

                                                                                                                                                        2. 2

                                                                                                                                                          If exploring such models, check out HLL-to-microcode compilers and No Instruction Set Computing (NISC).

                                                                                                                                                        3. 1

                                                                                                                                                          Interestingly, the Rust wikipedia page makes a bit deal about it trying to be a “concurrent” language. Apparently it’s not delivering if that is the major counter you gave.

                                                                                                                                                          1. 2

                                                                                                                                                            Occam is an example of a concurrency-oriented language. The core of it is a concurrency model. The Rust language has a design meant to make building safe concurrency easier. Those frameworks or whatever might be concurrency-oriented. That’s why they’re advertised as such. Underneath, they’re probably still leveraging a more sequential model in base language.

                                                                                                                                                            Whereas, in concurrency- or parallelism-first languages, it’s usually the other way around or sequential is a bit more work. Likewise, the HDL’s the CPU’s are designed with appear to be concurrency-first with them beating the designs into orderly, sequential CPU’s.

                                                                                                                                                            So, Im not saying Rust isnt good for concurrency or cant emulate that well. Just it might not be that at core, by default, and easiest style to use. Some languages are. That make more sense?

                                                                                                                                                            1. 0

                                                                                                                                                              Yes I know all that, my point was that the wikipedia page explicitly states Rust is a concurrent language, which if true means it fits into the idea of this post.

                                                                                                                                                        4. 3

                                                                                                                                                          Does Rust do much to address the non-sequential nature of modern high-performance CPU architectures, though? I think of it as a modern C – certainly cleaned up, certainly informed by the last 50 years of industry and academic work on PLT, but not so much trying to provide an abstract machine better matched to the capabilities of today’s hardware. Am I wrong?

                                                                                                                                                          1. 3

                                                                                                                                                            By the definitions in the article, Rust is not a low level language, because it does not explicitly force the programmer to schedule instructions and rename registers.

                                                                                                                                                            (By the definitions in that article, assembly is also not a low level language.)

                                                                                                                                                            1. 1

                                                                                                                                                              Ownership semantics make Rust higher-level than C.

                                                                                                                                                              1. 3

                                                                                                                                                                I disagree:

                                                                                                                                                                1. Parallelism would make whatever language higher-level than C too but the point seems to be that a low-level language should have it.
                                                                                                                                                                2. Even if true, ownership is purely a compile-time construct that completely disappears at run-time, so there is no cost, so it does not get in the way of being a low-level language.
                                                                                                                                                                1. 2

                                                                                                                                                                  Parallelism would make whatever language higher-level than C too but the point seems to be that a low-level language should have it.

                                                                                                                                                                  This premise is false: Parallelism which mirrors the parallelism in the hardware would make a language lower-level, as it would better mirror the underlying system.

                                                                                                                                                                  Even if true, ownership is purely a compile-time construct that completely disappears at run-time, so there is no cost, so it does not get in the way of being a low-level language.

                                                                                                                                                                  You misunderstand what makes a language low-level. “Zero-cost” abstractions move a language to a higher level, as they take the programmer away from the hardware.

                                                                                                                                                          2. 2

                                                                                                                                                            I came across the X Sharp high-level assembler recently, I don’t know if it’s low-level enough for you but it piqued my interest.

                                                                                                                                                            1. 2

                                                                                                                                                              There’s no point of a true low-end language, because we can’t access the hardware at that level. The problem (in this case) isn’t C per se, but the complexity within modern chips that are required to make them pretend to be a gussied-up in-order CPU circa 1993.

                                                                                                                                                            1. 25

                                                                                                                                                              The logo is as uninspiring as the language, so it’s a perfectly fitting design in my opinion.

                                                                                                                                                              (Not kidding, after reading the announcement, I checked whether it was April 1st…)

                                                                                                                                                              1. 9

                                                                                                                                                                I’m sure I’ll be downvotes for this, but still.

                                                                                                                                                                I found it way too unconstrictive just to blame them without clear explanation. I’m really sad not to have a thoughtful comment about why would the golang « brand » changed their visual identity.

                                                                                                                                                                These negative comments are way too easy and really do not help the lobsters community. I don’t know if I’m the only one feeling that way but the post seem important and I don’t see any comments that would make me think a bit more about the subject.

                                                                                                                                                                Sorry @soc, it’s not directly aiming at you!

                                                                                                                                                                1. 2

                                                                                                                                                                  You’re not the only one. I don’t see it changing for the better. These days, I just downvote and move on.

                                                                                                                                                                  1. 1

                                                                                                                                                                    I see how my comment could come off as a bit troll-ish, although it wasn’t intended that way.

                                                                                                                                                                    Not sure how it could have been worded differently though.

                                                                                                                                                                    1. 1

                                                                                                                                                                      I’m wasn’t especially writing about the wording but more about the purpose your the comment.

                                                                                                                                                                      The idea is that opinions should matter if they carry constructive content with them, and by that I mean a bit more context or explanations.

                                                                                                                                                                      If one do not find constructive explanations about the whys of the opinion, maybe it shouldn’t be shared to the risk of having “me too’ like comments.

                                                                                                                                                                      To be clear, I’m not blaming anyone! I just feel that these kind of comments do not stimulate anything worthwhile for the community.

                                                                                                                                                                1. 1

                                                                                                                                                                  This is using a network file system, right? How easy or hard is it to use real local SSD disks? Somewhat like the SSDs on Amazon EC2’s i2 machines.

                                                                                                                                                                  1. 1

                                                                                                                                                                    I’m not sure of this but from the Kubernetes documentation on the matter:

                                                                                                                                                                    A hostPath PersistentVolume uses a file or directory on the Node to emulate network-attached storage. hostPath: path: “/mnt/data”

                                                                                                                                                                    https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume

                                                                                                                                                                  1. 26

                                                                                                                                                                    I think there’s a lack of requirements here. Framebuffer is rejected because alt-tab doesn’t work, then X11 is rejected because fonts are hard, but how were you planning to draw fonts on the framebuffer? The requirements seem to evolve with every option, but that’s a poor way to make a decision. You waste time evaluating clear non fits, and frequently up with decision paralysis by failing to establish any sort of order or scoring metric.

                                                                                                                                                                    1. 5

                                                                                                                                                                      True, fonts on a framebuffer wouldn’t work either. I think people who didn’t know that was an option might enjoy hearing about it.

                                                                                                                                                                      1. 4

                                                                                                                                                                        If you understand little about the domain, it might be hard to formulate a specific concrete list of requirements. You might retort that one should spend more time learning the domain, but one reasonable approach to that is to go out and try something. Thus, requirements can naturally evolve as you learn more.

                                                                                                                                                                        1. 7

                                                                                                                                                                          OK, but then I think we should at least clarify what our evolved requirements are. Terminal apps are rejected because st is 2000 lines of code and that’s too much, but I’m to believe graphical json python will be less than that? If we have evolved past that requirement, shouldn’t we revisit early options?

                                                                                                                                                                      1. -3

                                                                                                                                                                        you had a problem with the output format of du, so you rewrote the whole thing in a different language and your version is 4x slower

                                                                                                                                                                        free software exists for the exact reason that people can improve upon it and change the bits they don’t like

                                                                                                                                                                        don’t get me wrong, i like the final product, it looks very nice and human friendly

                                                                                                                                                                        it just feels like you wrote it in rust for the sake of it, instead of trying to achieve a better design or fix some flaw deeply rooted in the fundamental design of the existing implementation

                                                                                                                                                                        by doing so you threw away all the work that others made available for free, and ended up with something with sub-par efficiency

                                                                                                                                                                        1. 5

                                                                                                                                                                          I did write it rust for the sake of it. I like working in rust I dislike working in c.

                                                                                                                                                                          I also contributed several fixes to the rust port of du in coreutils. The rust port of du is also a lot slower than the original c du. I do not know why. This is something I want to look in to without starting a c vs rust speed flamewar.

                                                                                                                                                                          I guess to me du and dust are different tools and adding the dust features to du wouldn’t be accepted (the point of dust is to remove the need for - h flag and to autosort for you).

                                                                                                                                                                          1. 3

                                                                                                                                                                            du is part of POSIX. coreutils, which includes du, would not accept output format change.

                                                                                                                                                                            1. 2

                                                                                                                                                                              Not to mention that large, mature projects, like coreutils, are not super easy to augment with functionality like what dust provides, not to mention the social challenges of actually contributing a change to such a project.

                                                                                                                                                                              The whole assumption of @izabera’s comment, that people need to not write whatever software they want and instead only contribute to existing projects, is incredibly stuck up its own ass.

                                                                                                                                                                              1. 0

                                                                                                                                                                                I don’t think that’s what izabera is saying. What is argued is that it is better to contribute to du than to write dust. It is like saying helping the poor is better than enjoying the beach; that does not mean people shouldn’t enjoy the beach.

                                                                                                                                                                                When you hear such things, replying that people can do whatever they want, while true, is unproductive. My reply is more akin to pointing out why donating to certain charity will not actually end up helping the poor.

                                                                                                                                                                                1. 4

                                                                                                                                                                                  When you hear such things, replying that people can do whatever they want, while true, is unproductive.

                                                                                                                                                                                  izabera’s comment in the first place is unproductive. I had some asshole say the same thing to me in the past. They can bugger off. Free software very clearly does not exist just for the sake of small iterative improvement. There are many reasons and benefits of free software, and picking a single one and lambasting folks for it is… Well… @nebkor got it right: stuck up its own ass.

                                                                                                                                                                                  1. 0

                                                                                                                                                                                    Yeah… I disagree with lambasting, but I still think it is a fair game to discuss strategic aspect. Say, if your goal is to help users, is it better to contribute to existing popular C implementation, or to start Rust one? As bootandy already said that the goal was to write Rust, and since that goal can’t be fulfilled by contributing to C implementation, it is a moot. But if the goal was to help users, it would be relevant.

                                                                                                                                                                                    As another example, the goal of Mozilla is much closer to “help users” than to “write Rust”. So the strategic aspect of what is the best way to achieve that goal, whether it is to work on existing C++ codebase or to rewrite it in Rust, is a very real question. For another, if someone’s goal is to, say, improve the security of world’s computational infrastructure, it is a very real question whether it is best to improve C++ or to work on Rust. And if and only if two people agree on the goal, it is legitimate to argue by one to the other that “you are wasting your time with Rust”. (I believe this is roughly why Daniel Micay is now working on Copperhead OS instead of Rust. I tend to agree that if one’s goal is to improve security, Rust is currently not the best bet. I work on Rust because my goal is not to improve security.)

                                                                                                                                                                          1. 3

                                                                                                                                                                            As I see it, despite the wave of blog posts, Rust is still niche. Its usage is very small compared to the massively popular languages. I predict that unless Rust changes a lot and makes it easy for anyone to use, its usage will remain comparable to Haskell or Lisp usage: widely loved or desired language but too weird for mass adoption.

                                                                                                                                                                            Let’s see in five years how this plays out. Maybe I’ll be wrong.

                                                                                                                                                                            1. 11

                                                                                                                                                                              I don’t disagree and that makes me sad for what we as programmers ask for from our tools. I went through something like this a long time ago. I chose the “easy route” over the “difficult” one. I wish I hadn’t.

                                                                                                                                                                              In my case, I went with C over Ada because Ada frustrated me and it was hard to get it to compile. That my C programs were easy to compile but crashed all the time on me was never something that I saw as problematic until I gained a lot more experience.

                                                                                                                                                                              I wrote a bit about that a couple years back.

                                                                                                                                                                              https://www.monkeysnatchbanana.com/2016/02/22/learning-from-ada/

                                                                                                                                                                              1. 3

                                                                                                                                                                                Good write-up. That should be a submission instead. :)

                                                                                                                                                                                1. 4

                                                                                                                                                                                  Thanks. Already submitted a couple years ago. Once from me is enough. If it ever reappears on lobste.rs, it will be because of someone else.

                                                                                                                                                                              2. 3

                                                                                                                                                                                I’d like to like Rust, but it seems a complex language.

                                                                                                                                                                                I’m not talking about the borrow checker, but the large number of features it proposes.

                                                                                                                                                                                There must be a way to get a good statically typed safe language that is simple… or not?

                                                                                                                                                                                1. 2

                                                                                                                                                                                  Which features do you think can be removed without sacrificing safety while maintaining usability?

                                                                                                                                                                                  1. 2

                                                                                                                                                                                    What a wonderful and deep question!

                                                                                                                                                                                    The honest answer is: I don’t know. :-)

                                                                                                                                                                                    However I usually do not consider simple anything that qualify as syntactic sugar (eg macros). Generics are useful but increase the language complexity. Same goes for Traits or Closures.

                                                                                                                                                                                    Note that I like each of these features.

                                                                                                                                                                                    But I would like more a safe language where there is always one single obvious way to do each thing.

                                                                                                                                                                                    1. 5

                                                                                                                                                                                      But I would like more a safe language where there is always one single obvious way to do each thing.

                                                                                                                                                                                      Have you used Rust in anger yet? It is not that far from this ideal. Certainly closer than a lot of other languages I have experience with, although I think perfection on this front isn’t really attainable.

                                                                                                                                                                                      Macros are a good candidate to remove, in theory. But it’s a classic example of letting perfection be the enemy of good. Simple use of macros saves me a lot of annoyance, especially when writing tests. I’ve managed to stay away from more complex uses in all but one instance in my four years of working in Rust nearly daily. Not everyone has avoided them though.

                                                                                                                                                                                      I don’t see how you could get a safe language with low level control without generics though. I can almost live happily without generics in a language like Go, but not Rust. Traits come right along with that as the implementation of useful generics (not the only choice, but you need something).

                                                                                                                                                                                      I’m surprised to see you mention closures. They are as standard of a feature as they come.

                                                                                                                                                                                      Keep in that Rust isn’t just after safe and static types here. We also want zero overhead abstractions. Combining all three creates a sharp knife that cuts through the design space.

                                                                                                                                                                                      Note that I can’t actually answer my question. I am way too buried in Rust to have the requisite perspective. But. I can at least challenge others on it. :)

                                                                                                                                                                                      1. 1

                                                                                                                                                                                        I can at least challenge others on it.

                                                                                                                                                                                        And you are welcome! I did not tried Rust on any real world project, so my opinion is pretty weak, based on general language considerations, reading the book and few toy programs (written before Rust 1.0).

                                                                                                                                                                                        Macros are a good candidate to remove, in theory. […] I’ve managed to stay away from more complex uses…

                                                                                                                                                                                        That’s a smell of a design issue: people should not need to pick “the good parts” of a language. ;-)

                                                                                                                                                                                        I don’t see how you could get a safe language with low level control without generics though. […]

                                                                                                                                                                                        By simple composition.

                                                                                                                                                                                        You might object that it’s boring and verbose, and you’re probably right.

                                                                                                                                                                                        But it make the language simpler.
                                                                                                                                                                                        Note that I’m not advocating the Go approach, which is another complex language, just with a different kind of complexity.

                                                                                                                                                                                        I’m surprised to see you mention closures.

                                                                                                                                                                                        Again, a cool feature on their own, but they further increase the language complexity.

                                                                                                                                                                                        And again, without them, programs will be more verbose.
                                                                                                                                                                                        But language’s verbosity might force the programmer to keep things simple and small.

                                                                                                                                                                                        We also want zero overhead abstractions.

                                                                                                                                                                                        And this is another thing I like about Rust. But, while I know nothing about language design (and it’s pretty out of my sphere of competences) my insight is that it could be simpler without sacrifying safety or zero overhead abstractions.

                                                                                                                                                                                        Note that such complexity is not for free: it locks the language to one single LLVM based implementation, that is hard to port to new hardware or new operating systems.

                                                                                                                                                                                        1. 4

                                                                                                                                                                                          That’s a smell of a design issue: people should not need to pick “the good parts” of a language. ;-)

                                                                                                                                                                                          I don’t think so. To be clear, that’s what I meant by letting perfect be the enemy of good. No design is perfect, just like no battle plan survives first contact with the enemy. Many uses of macros do paper over shortcomings in the expressivity of the type system, but fixing that requires more features, like higher kinded polymorphism or integer generics or specialization. I think you’d say all of those things are too complex. Some of those things are or will be coming to Rust, and macros have allowed, in certain circumstances, folks to solve problems that maybe they wouldn’t have otherwise.

                                                                                                                                                                                          By simple composition.

                                                                                                                                                                                          Note that Rust’s type system already favors composition today, in a way that works well with generics. (i.e., Rust does not have something like class inheritance.)

                                                                                                                                                                                          You might object that it’s boring and verbose, and you’re probably right.

                                                                                                                                                                                          But it make the language simpler.

                                                                                                                                                                                          Very strongly disagree, and my counter argument has nothing to do with “boring” or “verbose,” and everything to do with feasibility. A fundamental design proposition of Rust is that folks can build safe APIs that may or may not use unsafe internally. This is very common in the implementation of generic data structures like hash maps, btrees and growable arrays (vectors). If you didn’t have generics, I don’t know how you would build a single implementation that could be reused for data structures like that in a way that has zero overhead. Rebuilding those data structures isn’t practical, since getting the best performance possible requires unsafe code.

                                                                                                                                                                                          You can thumb your nose at this and just say these are symptoms of design flaws, sure, but removing generics would certainly not make using the language simpler. It would be much much harder and more complex. What would be more interesting is to suggest the removal of generics and also provide an idea on how to solve the problem of reusability. Because of the desire to limit the scope of unsafe, reusability is a critical aspect of writing code in Rust, because you really do not want to be re-litigating the implementation of unsafe code. It is much better to do it once, carefully audit it, and get as many others to use it as possible.

                                                                                                                                                                                          You might say that dealing with unsafe in this way is itself a flaw. And that the language should be able to permit more things safely. Maybe. But I think that’s an open question at this point, and almost certainly comes with extra type system expressivity, which may make things more complexity. But, that is certainly something Rust can improve on in the future. Nevertheless, it’s hard for me to see an alternative to the core design principle of building safe APIs over unsafe internals.

                                                                                                                                                                                          Note that such complexity is not for free: it locks the language to one single LLVM based implementation, that is hard to port to new hardware or new operating systems.

                                                                                                                                                                                          No it doesn’t?

                                                                                                                                                                                          Anyway, I guess this conversation has run its course. I’d definitely encourage you to keep thinking about concrete suggestions to make a different programming language that accomplishes what Rust does, but in a way that’s simpler. I can maybe imagine some tweaks here and there, but I think omitting some of the big picture features you’ve listed (without replacing them with something else) would be a serious mistake. The fact that you don’t want closures hints to me that we may have fundamentally different opinions that cannot be overcome.

                                                                                                                                                                                          1. 2

                                                                                                                                                                                            Wow! :-D

                                                                                                                                                                                            I think you have largerly overestimated my competence about language design tradeoffs!

                                                                                                                                                                                            But frankly, given the quality of your answer, I do not regret the misunderstanding. Thanks! ;-)

                                                                                                                                                                                            All you say is reasonable (and informative).
                                                                                                                                                                                            And despite being fluent in several different language, I’ve no real clue to propose alternatives. To me Rust feels complex. Not really difficult, just complex.

                                                                                                                                                                                            But (and sorry if I poke you more, hoping for an even greater response :-D), all the features I named can be defineds as (properly checked) syntactic sugar.

                                                                                                                                                                                            Whatever you can do with macro, generics and even closures, you can do manually. And whatever you can do manually, you can do by generating code.
                                                                                                                                                                                            The point is, actually, if you can write or generate boring and safe code.

                                                                                                                                                                                            I agree that without such syntactic sugar, some programming tasks become overly verbose.
                                                                                                                                                                                            And boring. But this might discourage complex programs, which is a Good Thing (TM).

                                                                                                                                                                                            Note that such complexity is not for free: it locks the language to one single LLVM based implementation, that is hard to port to new hardware or new operating systems.

                                                                                                                                                                                            No it doesn’t?

                                                                                                                                                                                            Do you mean that we have a Rust compiler not based on LLVM IR?

                                                                                                                                                                                            I missed that! What a great news!

                                                                                                                                                                                            1. 4

                                                                                                                                                                                              To me Rust feels complex. Not really difficult, just complex.

                                                                                                                                                                                              I see. I understand that, yes. I guess the thing that is more interesting to me is whether it is necessary complexity or incidental complexity. If it’s necessary, then great. We need to pick ourselves up by the bootstraps and find a way to teach people that complexity until it becomes easier to learn. If it’s incidental, then the design needs more work. Of course, all designs will have some amount of incidental complexity, but if there’s a huge area of the design space that Rust is missing, then it might be possible that there is in fact a lot of incidental complexity! Or perhaps changes in hardware in the future will alter the calculus we use today to decide things. It has certainly had an impact on C’s design trade offs.

                                                                                                                                                                                              And whatever you can do manually, you can do by generating code.

                                                                                                                                                                                              Note that generics are, to some extent, an interface to a code generation tool. It is through an automatic process called monomorphization, but that’s basically all it’s doing internally: code generating. There are other approaches to generics that languages like Java take that don’t necessarily require code generation, but they tend to have performance trade offs that would be unacceptable in a language like Rust.

                                                                                                                                                                                              Regardless, for Rust, I’m very skeptical that a simple code generation tool would be feasible in practice, but it is of course untested.

                                                                                                                                                                                              Do you mean that we have a Rust compiler not based on LLVM IR?

                                                                                                                                                                                              Note that you said that it “locks” the language to one single LLVM based implementation, but there is nothing about Rust that makes it true. A different statement that I might agree with is, “The complexity of the language makes it difficult to build alternative implementations.” :-)

                                                                                                                                                                                              With that said, there is actually a Rust compiler that doesn’t depend on LLVM called mrustc. I believe it compiles to C. It is obviously a work in progress, but IIRC, it has bootstrapped rustc itself, which makes it worth taking serious IMO. :-)

                                                                                                                                                                                              1. 2

                                                                                                                                                                                                And despite being fluent in several different language, I’ve no real clue to propose alternatives. To me Rust feels complex. Not really difficult, just complex.

                                                                                                                                                                                                Yeah, Rust is relatively complex. I like the language, and I get a huge amount of leverage out of it, but I think there are some things that could be simplified, combined, and made more powerful and general in a future incarnation of a systems language. But the bones of Rust is still far simpler than C++, and much saner than C, and it has a great ecosystem, so it’s the one I pick!

                                                                                                                                                                                                I’m putting my money where my mouth is by tinkering on some ideas for future langs, but don’t be expecting anything this decade! Building languages is hard, especially ones that try to tackle the domains that Rust works in.

                                                                                                                                                                                1. 2

                                                                                                                                                                                  I can’t help but disagree with the “accept interfaces, return structs” thing. Especially if you’re exposing those functions publicly. I’m probably dumb and just doing this very wrong, but I’ve lived through many cases where mocking dependencies is harder than it needs to be because I need to provide a struct as the result of something. I mean, especially when it’s an external package, I don’t necessarily want to be tightly bound to the struct that is exposed and would generally much rather use an interface. Am I doing this wrong?

                                                                                                                                                                                  1. 4

                                                                                                                                                                                    If you mock dependencies, you’re creating a mock implementation of a narrowly-scoped interface as an input to a function, not a copy of a struct as the output of an e.g. constructor.

                                                                                                                                                                                    Concretely, if you have a function

                                                                                                                                                                                    func process(s3 *aws.S3) error {
                                                                                                                                                                                        x, err := s3.activate()
                                                                                                                                                                                        if err != nil {
                                                                                                                                                                                            return errors.Wrap(err, "activation failed")
                                                                                                                                                                                        }
                                                                                                                                                                                        if err := x.signal(); err != nil {
                                                                                                                                                                                            return errors.Wrap(err, "signal failed")
                                                                                                                                                                                        }
                                                                                                                                                                                        return nil
                                                                                                                                                                                    }
                                                                                                                                                                                    

                                                                                                                                                                                    it should instead be

                                                                                                                                                                                    +type activator interface{ activate() (xtype, error) }
                                                                                                                                                                                    +
                                                                                                                                                                                    -func process(s3 *aws.S3) error {
                                                                                                                                                                                    +func process(a activator) error {
                                                                                                                                                                                    

                                                                                                                                                                                    but aws.NewS3 can and should continue to return *aws.S3.

                                                                                                                                                                                    1. 2

                                                                                                                                                                                      I had the same impulse when starting Go and friends rightly warned me away from it.

                                                                                                                                                                                      If you write functions that take interfaces and that return interfaces, your mock implementations start returning their own mocks, which gets brittle very fast. Instead, by having interfaces as inputs and concrete types are return values, your mock implementations can simply return a plain struct and all is well.

                                                                                                                                                                                      But I think it’s worth not taking someone else’s word for it, and trying both approaches and seeing how it goes.

                                                                                                                                                                                      1. 3

                                                                                                                                                                                        I agree but in effect, most non-trivial libraries (stuff like Vault, for example) return structs that expose functions that return structs. Now, if I need to access that second layer of structure in my code, the appropriate design would seem to be, under those directions, to declare a function whose sole job is to accept the first level of structure as an interface and spit back the second layer (which still leaves me with a top-level function that is hard to test)

                                                                                                                                                                                        1. 1

                                                                                                                                                                                          Looking at Vault’s GoDoc, I see Auth.Token, which sounds like the kind of API you’re describing. Sometimes, it might be a matter of how to approach the test, like instead of mocking heavily, you run an instance of Vault in the test and ensure your code is interacting with Vault correctly.

                                                                                                                                                                                          1. 1

                                                                                                                                                                                            I’m not against this, technically, but this is not necessarily practical. Take databases for example. Or external services? Vault is one thing, but what if the thing you depend on us an external service that you can’t mock cleanly, that depends on another service that it can’t mock cleanly? I don’t have a solution for this, I realize that exposing an object as an interface is not especially practical either, and that it’s weird to decide what to expose through that interface. The inverse, to me, is equally weird for other reasons.

                                                                                                                                                                                      2. 2

                                                                                                                                                                                        I’m probably dumb and just doing this very wrong

                                                                                                                                                                                        If so, then I’m right there with you. If I followed @peterbourgon’s advice, then my code would be an unsalvageable dumpster fire. Defining a billion ad hoc interfaces everywhere very quickly becomes unmaintainable in my experience. I’ve certainly tried to do it.

                                                                                                                                                                                        See also: https://lobste.rs/s/c984tz/note_on_using_go_interfaces_well#c_mye0mj

                                                                                                                                                                                        1. 1

                                                                                                                                                                                          All advice has a context, and the context for mine is that you’re dealing with mostly- or completely-opaque structs for the purposes of their behavior (methods) they implement, and not for the data (fields) they contain. If you’re doing mostly the latter, then interfaces don’t help you — GetFoo() Foo is an antipattern most of the time. In those cases, you can take the whole original struct, if you use a lot of the fields; or the specific fields you need, if you only take one or two; or, rarely, re-define your own subset of the struct, and copy fields over before making calls.

                                                                                                                                                                                          But when I’m in the former situation, doing as I’ve illustrated above has almost always improved my code, making it less fragile, easier to understand, and much easier to test — really the opposite of a dumpster fire. And you certainly don’t want a billion ad-hoc interfaces, generally you define consumer interfaces (contracts) at the major behavior boundaries of your package, where package unit tests naturally make sense.

                                                                                                                                                                                          1. 1

                                                                                                                                                                                            I do suspect we are thinking of different things, but it is actually hard to tease it apart in a short Internet conversation. :-) I am indeed dealing with completely-opaque structs, and those structs generally represent a collection of methods that provide access to some external service (s3 being a decent example, but it could be PostgreSQL or Elasticsearch), where their underlying state is probably something like a connection pool. Defining consumer interfaces was completely unmaintainable because their number quickly becomes overwhelming. Some of these types get a lot of use in a lot of code, and tend to be built at program initialization and live for the life of the program. At a certain point, using consumer interfaces just felt like busy work. “Oh I need to use this other method with Elasticsearch but the interface defined a few layers up doesn’t include it, so let’s just add it.” What ends up happening is that the consumer interfaces are just an ad hoc collection of methods that wind up becoming a reflection of specific implementation strategies.

                                                                                                                                                                                      1. 2

                                                                                                                                                                                        Great post; this is one of my pet peeves.

                                                                                                                                                                                        One minor point: ‘This interactivity is usually missing in “compiled” languages’ <- I would say it’s true that this is missing from several mainstream compiled languages, (to their great detriment) but the majority of compiled languages do support it.

                                                                                                                                                                                        Edit: I guess the scare quotes around “compiled” might indicate it’s not meant to apply to most compiled languages, just the ones that are typically thought of as compiled?

                                                                                                                                                                                        1. -1

                                                                                                                                                                                          Great post; this is one of my pet peeves.

                                                                                                                                                                                          Mine as well. Even the local safe languages guru tends to conflate programming languages with their implementations.

                                                                                                                                                                                          1. 13

                                                                                                                                                                                            That’s unlikely. What’s more likely is that humans don’t need to be 100% unambiguously precise in every form of communication, and instead can usually rely on other humans to know what they mean.

                                                                                                                                                                                            1. 4

                                                                                                                                                                                              In addition to what burntsushi said, while it’s true that languages and their implementations are separable, it’s often not an accident that languages have their particular implementations. Bytecode interpreters and/or JIT compilers fit with Java, Python, etc in a way they just don’t for C. You can write them for C, but it’s typically less valuable.