Why Ada Is the Language You Want to Be Programming Your Systems With - <AUTHOR> https://hackaday.com/2019/09/10/why-ada-is-the-language-you-want-to-be-programming-your-systems-with/ <comment><USER3> This article promotes a popular misconception of the programming situation for defense projects in the 1970s. There may have been "hundreds of specialized programming languages" in existence that could be used, but just a handful actually predominated. Most aeronautical projects were done in JOVIAL.

I've talked about this history with engineers from the 1960s-70s. They did not regard the introduction of Ada as a good thing. The JOVIAL language had been developed by engineers and modified through experience over several years to become something they were quite happy with. The impetus that led to Ada came from management and implementation was done by academics.

<comment><USER4> I'm sure that's all true.

There is something to be said for a language that was written to a spec from the beginning, however. That is a luxury that few languages today can claim; most language specs were written _after_ the first version(s) of the language were implemented, and were written to match the implementation, not the other way around.

Writing the specification first makes for a much cleaner language, though not always the most comfortable, if you put any weight in your own opinions.

[I am speaking generally from here onwards and I am not looking for specific examples to the contrary. I know full well that there are exceptions to the generalizations below.]

Lots and lots of engineers today would (and do) express complete comfort in their daily drivers of C and C++, while producing buffer overflow bugs and use-after-free bugs all the while. Maybe it isn't in the best interest of the software landscape to let developers choose the languages they use...

We have, as a community, let our feeling that software development is an art dictate how we react and deal with new information; we overwhelmingly reject it. What we're doing now is so much more comfortable, and we feel like we know what we're doing with [language x] finally! Why would I want to overturn all that comfort?

Software development is not an art, it is a science, and we've been ignoring the science part of that as we refuse to abandon our favorite language(s) for things that could easily be proven to be better, if we would just do the testing to determine performance numbers, ease of bug introduction, ease of maintenance, and so on.

We call ourselves "software engineers" and we don't measure anything beyond the most rudimentary measurements. We DEFINITELY do not actively look to overturn our comfort in favor of finding a better language to use. We don't try to improve anything the moment that might mean that we switch languages, no matter how significant the long term advantages could be. We don't even think about what the long term advantages could be; we're too busy telling ourselves that we are smart and that we can do it in whatever language we are comfortable with.

<comment><USER5> Until software engineers are personably liable for their work like civil and mechanical engineers are and have to carry insurance because they will get sued for negligence if there are issues, it's not professional engineering.

<comment><USER6> Software engineers are personally liable for their work. It's just that it's much more difficult to prove the various elements of negligence in the software realm, which makes litigation costly and uncertain. How negligent is an arithmetic overflow in a free software library that causes the loss of # of ads clicked for 10,000 Facebook users? Could the developer have foreseen the use case? What's the value of that loss?

An arithmetic bug in a flight safety system or financial trading platform? Your odds of being successfully sued just went up astronomically as it's much easier to show negligence _and_ put a dollar figure to damages.

Professional licensing regimes are principally designed to prevent negligence by a priori preventing people from holding themselves out as capable of performing some task. In terms of legal liability all they really do is restrict the extent to which you can limit your liability contractually. That's important in business and in professional services (doctor, lawyer, etc), but for downstream users who suffer damages there was never a contract involved, anyhow.

</comment></comment></comment></comment><comment><USER7> I live near Sydney University ( not my alma-mater ). In a rather serendipitous turn, one day on my way home from the shops I was walking past one of the USYD buildings and there was a giant stack of library books that had thrown out onto the sidewalk as rubbish to be collected by the council. It turns out they were old science faculty books that were no longer prescribed material. I started looking through them and found several books on Safety-critical software development in Ada, several books on hardware design and several others on software development. I took them all home, at first thinking the Ada ones would just be some archaic novelty. When I got a chance to read them I was amazed. I was expecting something akin to COBOL from the language. Instead I found a language that was extremely well designed for its domain. I'd already done a bit of embedded and operating system development, and I could immediately see how Ada would benefit a developer in these areas. Even representation clauses alone are such a huge convenience for low-level programming. I haven't looked back since. I was actually in the process of preparing a bare-bones example of operating system development in Ada, if this post had been three days later I'd have been able to link the finished product here right now.

<comment><USER8> > if this post had been three days later I'd have been able to link the > finished product here right now.

Well, that was 5 days ago, which means you _CAN_ post the link! (I'd like to see it, quite a lot.)

<comment><USER7> Here's my initial implementation: [https://github.com/ajxs/cxos](https://github.com/ajxs/cxos) I'm going to continue to work on it for some time, but this is the minimal working example that I had enough time to properly document.

</comment></comment></comment><comment><USER9> There is some overlap in the use cases between Ada-in-the-mainstream (which seems to be what the article is suggesting) and Rust. The existence of Rust will make it even harder for Ada to break out of its existing domains.

Both seem to have good ecosystems, but quite different. Ada has more high- assurance tooling and practices. Rust has more in terms of packaging and general-purpose high level libraries.

With Ada, it's pretty hard to shake the feeling that it's not as welcoming. Either you are building a spacecraft, or "what are you doing here?". Not that anyone actually says that, and in my limited experience playing with the language, everyone seemed nice. It's just a feeling that's hard to escape. I wish it weren't so, because I think Ada has a lot going for it and it could be good in more donains.

One kind of cool thing is that it's designed to get by without so many heap allocations, and it does some interesting things to allow/encourage more stack allocations. It also has more sophisticated runtime checks, like contracts, that are kind of between a unit test and a compile-time check.

Rust is great at managing complexity. I keep holding out hope that Ada can somehow give us some simplicity back while still making useful software.

<comment><USER10> I understand what you're getting at here I tbink, but one of the ecosystem challenges we run into is that while Rust is abstractly a fantastic choice for the domain of systems development that would often be served by Ada (in fact we think it's a lot better in some respects because we can do more statically ahead of time, that Ada does dynamically at runtime, by abusing the Rust type system and borrow-checker), the Rust ecosystem isn't really focused on this class of problems.

There's significantly more attention provided to things like Wasm than there is to things like embedded use cases for example.

The two languages, ecosystems, and communities seem to have largely non- overlapping objectives despite having overlapping technical capabilities.

<comment><USER11> > The two languages, ecosystems, and communities seem to have largely non- > overlapping objectives despite having overlapping technical capabilities.

I keep thinking servers should be written a bit more like embedded thingies. (Though I suspect the actual trend is in the other direction).

Both kinds of software deeply interested an asynchrony and concurrency (though not necessarily parallelism). And both also tend to talk over networks to other gadgets as part of a complex system. And since my job often revolves around putting out fires when severs OOM, I'd also like to see a lot less malloc().

It would be nice if software could place hard upper limits on how many resources (including RAM) it takes to serve a request and then reject requests early. With real-world languages and frameworks, we can only do very primitive approximations to this. But a framework written from the bottom-up with a malloc-is-evil mentality () might be able to do it.

<comment><USER10> We have a crate internally that uses type-level programming to do statically tracked memory allocation (technically the method can be used for other kinds of resource management too), so that we can have compile-time guarantees that allocations will always succeed and we'll never allow memory to be allocated from inappropriate regions (e.g. mapped registers).

Layered on top of that we can also ensure that if at runtime your device memory configuration is sufficiently different from what your assumptions were at compile-time, then we don't allow the device to boot so that you don't end up in a dangerous resource exhaustion situation by accident.

We use this for no_std embedded shaped use cases, but you could also use this library and programming model to create a special heap in your normal programs which have statically tracked allocations to create some region of your program context that you want to have assurances like that.

We have 3-4 things kind of in that vein in our pipeline to open source, and I think that's number 3.

</comment></comment></comment></comment><comment><USER12> > Ada code controls rockets like the Ariane 4 and 5, many satellites, and > countless other systems where small glitches can have major consequences.

A somewhat amusing endorsement given that the infamous failure of the maiden launch of the Ariane 5 due to series of interconnected software bugs - <USER2> reminder perhaps that the choice of implementation language does not automatically make for a reliable system.

<comment><USER7> There's always someone who brings this up whenever Ada is mentioned, as if it serves as a damning refutation of Ada's reputation as a safe language. That bug was caused by a series of design failures if anything, rather than software bugs. From memory, they reused the inertial reference system from the Ariane 4 mission without testing its suitability for a different delivery vehicle. The actual 'bug' was caused by an integer overflow occurring due to the velocity variable not being wide enough to handle the higher horizontal velocities of the newer rocket. This caused the rocket to go off course and require termination. The backup computers had the exact same flaw due to having the same programming. I'm guessing they used Ada's modular integer types, which wrap around when they overflow. This is the same as C, and I'm guessing the same as Rust. Using either of those languages wouldn't have helped in the slightest here. It's not some software bug caused by Ada. It was a domain issue caused by a failure in management and testing.

<comment><USER13> > The actual 'bug' was caused by an integer overflow occurring due to the > velocity variable not being wide enough to handle the higher horizontal > velocities of the newer rocket. This caused the rocket to go off course and > require termination.

This is not entirely correct. The code which overflowed was unnecessary for flight. People have this idea that the sensor sensed it was going 32745 m/s to the east one moment, and -32723 m/s the next, and then tried to compensate for the sudden gust of wind it must have encountered. This is incorrect. The routine in question was only supposed to run when it was on the ground, and served no purpose in flight. It was scheduled to be disabled 40 seconds after launch. (The flight failed after 37 seconds)

The problem is specifically the fact that the code was written in Ada. Ada does not fail the way other languages fail when you overflow. Instead of given an incorrect value (which never would have impacted the flight) it throws an exception. This exception was uncaught. This uncaught exception brought down the entire flight control system, despite the fact that the falling code was not controlling flight.

Rust improves upon this situation by panicking in debug mode and wrapping in release mode, which is better than the Ada behavior in every possible way. Normal "unsafe" languages improve this by giving an incorrect value as the result, which in the case of Ariane V would have saved the flight.

<comment><USER7> You could have condensed your entire post to just "This exception was uncaught". Your last point is just outright ridiculous:

> "Rust improves upon this situation by panicking in debug mode and wrapping > in release mode, which is better than the Ada behavior in every possible"

So... What you're trying to tell us is that Ada recognising an exceptional situation has occurred is bad, and that Rust just ignoring it is a good thing? Righto... An integer overflow occurring in this scenario _is_ an exceptional condition. In this case it was one that the developers did not anticipate. This issue arose because they mistakenly thought it was not possible for this scenario to occur. The mistake here was not anticipating the exception and handling it in a meaningful way, not the raising of an exception. The fact that not raising an exception would have avoided the disaster in this case is entirely incidental. It was still an exceptional circumstance that the developers, testers, designers did not anticipate. The silent wrapping behaviour you describe would have bitten someone eventually, perhaps here, perhaps somewhere else. Possibly with enormous repercussions.

> "Normal "unsafe" languages improve this by giving an incorrect value as the > result, which in the case of Ariane V would have saved the flight."

The normal "unsafe" languages you're referring to ( presumably C ) have a history of very poor error handling. Requiring an extremely high degree of conscientiousness when programming for mission-critical applications. Can you imagine _actually_ programming for what you're describing here? Not only does the computer have to guard against outright failure, but now it has to infer the possibility of an error state from a stream of in-band data in real-time. Righto...

Also, just so you know: Signed integer overflow is UNDEFINED BEHAVIOUR in C.

<comment><USER14> Tainting the dataflow rather than the control flow, like a quiet NaN, would be a better solution in cases like these. It happens that the solution that was chosen was the worst choice possible, but in other cases it wouldn't have been.

Probably the fact that the engineers got the case analysis wrong suggests that the methods of reasoning they were using weren't very effective. Modern formal methods might or might not have helped; guaranteeing that a piece of code is statically free of exceptions is not a terribly advanced thing to do, but really you'd like to guarantee that the variable was actually big enough. Having less code to reason about certainly would have helped.

C's choice is clearly unconscionable.

<comment><USER15> In hindsight it would have been perhaps better, but I don't think it can be said that having essentially random values in memory is better than having a controlled error handling action being executed. Is there any reference that such a course of action is preferred or beneficial?

<comment><USER14> We have a lot of experience with floating-point qNaN values since IEEE 488 introduced them in 1985, and more rigorous languages than Ada — such as OCaml, Haskell, and Rust — use a generalized version of the concept for a lot of error handling.

I don't think there's an open-and-shut case that error values are "preferred or beneficial" _in general_ with respect to exception handling through nonlocal control-flow transfers; there are reasonable arguments on both sides, and it seems likely that both are viable options in most circumstances, and which is better depends on those circumstances. (For example, lazy evaluation or catastrophic consequences attached to software crashes would seem to me to weigh heavily on the side of using error values, while interactive REPL-style usage would seem to me to weigh on the side of nonlocal control flow, perhaps with Common-Lisp-style restarts.)

My point was narrower: _in this particular case_ , using error values analogous to NaNs, rather than shutting down the SRI, would have saved the rocket, without posing the risk of using garbage data that C's semantics pose. _In this particular case_ , they would have been better. It's possible that, in other cases, perhaps even in other places in the SRI firmware, using error values would have been worse than unwinding the stack or shutting down the SRI. But _in this case_ they would have been better.

(If you aren't convinced of that narrow point, you should probably read the report from the Lions board of inquiry.)

<comment><USER15> I think I see what you mean. I'm personally interested in generally applicable rules, so the fact that it could have worked in this case doesn't help me decide what to so when designing another system.

In the general case, the Ada behavior of detecting and signaling numeric errors seems to be the only robust choice to me. The alternative could only be acceptable if it's proven that the algorithms fail safe in the presence of tainted data.

<comment><USER14> I'm interested in generally applicable rules, too; in this case, the generally applicable rule is that there is no generally applicable default robust behavior—the behavior of detecting numeric errors and crashing the system was the worst possible behavior in this context, but in other contexts it would be the best possible behavior. As I explained in [https://news.ycombinator.com/item?id=20935662](https://news.ycombinator.com/item?id=20935662), there was no acceptable way to handle such an error if it was detected at runtime. The only acceptable solution is to rigorously verify _before runtime_ that the error is not going to happen, as Rust does with, for example, multithreaded data races. (Well, you can't rule out hardware malfunction, but if you can make it sufficiently improbable you can use the strategy that they did in fact use.)

However, default-ignore vs. default-explode isn't a difference between handling errors with IEEE-754-qNaN-style dataflow-tainting and CLU-style nonlocal control flow transfers, as you seem to think. In either case, algorithms that need data that could not be computed successfully will fail to get that data; in either case, you can write the code to either propagate that failure or to attempt to recover from it somehow. In either case, you will not be able to control the spacecraft if you needed that data to control it. The difference I was mentioning, which is not generally applicable, is that in unusual cases like the Ariane 5 disaster, where the erroneous data shouldn't have been computed in the first place because it wasn't needed, qNaN-style error handling clearly results in safer behavior.

But, in general, real-time control is not a place where there exists a "robust choice" when your software is broken. If your jet engine control software or your antilock braking software is broken, you're likely to die, and no error handling strategy can prevent that, at least not at the level we're talking about. Biological systems manage this situation by having a melange of somewhat-independent control loops using different algorithms that are constantly fighting for control of the organism; while this does seem to produce systems that are more resilient than engineered systems, it's less efficient and enormously more difficult to develop or understand, and it's the opposite direction from the rigorous certainty you and I favor.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> Ada was the language of the undergraduate curriculum at the University of Washington when I was there (late 1980's) -- because Boeing. One of the core safety mechanisms was exception handling.

* The biggest thing I miss is that _every_ block was inherently a try-block. Just put your exception handlers at the bottom of the block. This provided a nice separation of "normal flow-control" and "exceptional flow-control". Why have try-catch anyway -- I never got used to that later in life.

* Exceptions were not synonymous with errors. In fact the way to read a file byte by byte was just to keep reading bytes and never explicitly check for end-of-file. Let the exception handler handle this case. Logic is much cleaner.

* Remember that you can't just dump core and shell out to the OS on an un-handled exception -- not if your controlling a ICBM flying of the continent. Ada really forced you to handle all errors at some level of the call-stack with an exception handler. At the outer-most level -- just call self-destruct.

<comment><USER17> > * The biggest thing I miss is that every block was inherently a try-block. > Just put your exception handlers at the bottom of the block. This provided a > nice separation of "normal flow-control" and "exceptional flow-control". Why > have try-catch anyway -- I never got used to that later in life.

That's still the case in Ruby, you can put a rescue at the end of the block.

<comment><USER16> "rescue" seems to imply "error," whereas "exception" means simply an unusual / non-normal condition. Does Ruby encourage exception handling as control-flow besides error conditions?

</comment></comment></comment><comment><USER18> If you've done VHDL, you'll be familiar with Ada's syntax. When the DoD commissioned the design of VHDL, they required that its syntax be based on Ada.

[https://en.wikipedia.org/wiki/VHDL#History](https://en.wikipedia.org/wiki/VHDL#History)

<comment> non-entity TIL VHDL was commisioned by the DoD.

Also random note, but wouldn't most engineers familiar with HDL's be electronic engineers rather than software developers?

<comment><USER19> A lot of people trained as EEs seem to end up in software dev jobs these days.

<comment><USER20> Yep. You don't find many EEs left in the US these days, unless they work at a military contractor. All the electronic hardware design work went to Taiwan and China, because that's where all the manufacturing for it is. What's left is government-related (military) stuff that obviously can't be outsourced to Asia, and some commercial stuff that they keep in-house for various reasons.

Basically, the US is a really bad place to be an electrical engineer specializing in electronic hardware, but it's a great place to be a software engineer or developer.

<comment><USER21> > Basically, the US is a really bad place to be an electrical engineer > specializing in electronic hardware, but it's a great place to be a software > engineer or developer.

Its because software engineers get paid much better in addition to more options. As a firmware engineer I straddled both sides. So many of my EE colleagues lamented they should have done more on the software side. A few of the brilliant ones moved to places like Google, Amazon which need them for specialist roles.

I remember a decade back I was visiting a customer in Taiwan to help debug our product and saw a legion of Chinese engineers helping out some project. I knew eventually Taiwan would lose some of their R&D to China.

</comment></comment></comment></comment></comment><comment><USER22> I've developed a set of "strongly typed" classes in C++ that have saved me a ton of grief.

Here are some examples. All classes are fundamentally floats. Errors are caught at compilation.

        cInches i1, i2, i3;
        cCm cm1, cm2;

        i1 = 1.f;  // error
        i1 = cInches(1.f);  // OK
        i3 = i1 + i2;  // OK
        cm1 = i1;   // error
        i1 = i2 * 2.f;  // OK
        float f1 = i1 / i2;  // OK
        i1 = i2 * i3;  // error! square inches are not inches

        int add(cInches in1, cInches in2);
        add(i1, i2);  // OK
        add(cm1, cm2);  // error

'Typedef's just don't cut it.

<comment><USER23> Why use floats when you can basically have doubles for the same cost? Floats tend to cause nasty surprises when you deal with real world units.

<comment><USER24> > Why use floats when you can basically have doubles for the same cost?

Floats costing the same as doubles is a myth stemming from x87 arithmetic, which is obsolete. On an x64 CPU running 64-bit code, your compiler can often pack four floats into one SSE register. Even when that doesn't happen, CPU microcode can likely do more with floats than with doubles.

Lastly, memory bandwidth usage and cache occupancy doubles, which is true even with x87.

<comment><USER23> The difference is meaningless in scalar code. Not everything is or can be vectorized. Pretty much no difference between one double and one float in a SSE XMM register.

> Even when that doesn't happen, CPU microcode can likely do more with floats > than with doubles.

I have no idea what that means. As far as I know, there's no CPU microcode dealing with floating point numbers.

> Lastly, memory bandwidth usage and cache occupancy doubles, which is true > even with x87.

So use floats when you have a lot of data.

<comment><USER24> If you already knew there was a cost difference, why didn't you just say so?

> The difference is meaningless in scalar code. Not everything is or can be > vectorized.

Multiple scalars can be packed into one SSE register even in scalar code. This is not the same as vectorization.

> Pretty much no difference between one double and one float in a SSE XMM > register.

Even then, some arithmetic operations have higher throughput with floats than with doubles.

> I have no idea what that means. As far as I know, there's no CPU microcode > dealing with floating point numbers.

Your CPU doesn't execute the ISA directly in hardware, it first converts it into architecture specific micro-ops. That includes FP operations.

> So use floats when you have a lot of data.

That's not the point. A lot of the time, the cost difference will indeed be irrelevant. The point is that _there is a cost difference_.

<comment><USER23> > Multiple scalars can be packed into one SSE register even in scalar code. > This is not the same as vectorization.

They can, but can you honestly call it a common case for scalar code?

> Even then, some arithmetic operations have higher throughput with floats > than with doubles.

By far the most (90-99%) of FP computation is additions and multiplications (or fused multiply adds). For scalar case (1 double or float in SSE register), they take _precisely_ as long on modern x86 hardware.

Sure, float div executes in 11 instead of 13-14 clocks for doubles and I'm sure transcendentals are even worse, but they're rarely needed. Even then, if the dependency chain allows, the cost is often OoO scheduled away in integer dominated code.

> Your CPU doesn't execute the ISA directly in hardware, it first converts it > into architecture specific micro-ops. That includes FP operations.

Except that SSE instructions pretty much _are_ micro-ops as-is. Despite similarly sounding term, microcode has nothing to do with micro-ops.

> That's not the point. A lot of the time, the cost difference will indeed be > irrelevant. The point is that there is a cost difference.

Well, I've written a lot of SSE, AVX etc. SIMD code. There sure is a big difference when you're processing large amounts of data. But... I've seen floats introducing silly precision related bugs [0] and a ton of useless float -> double -> float conversion chains. Most of the time most programmers should default to double.

[0]: Example: [https://randomascii.wordpress.com/2012/02/13/dont-store- that...](https://randomascii.wordpress.com/2012/02/13/dont-store-that-in-a- float/)

</comment></comment></comment></comment></comment></comment><comment><USER25> First, this is a great introduction article to Ada. It's a great history lesson, and analysis of where it's used and why.

That said, it seems to be arguing for something in a vacuum. Where is the mention of other new programming languages that also fit this category? Where is the mention of Rust? Rust fits all the same requirements:

\- A general, flexible design that adapts to satisfy the needs of embedded computer applications.

\- Reliability. The language should aid the design and development of reliable programs.

\- Ease of maintainability. Code should be readable and programming decisions explicit.

\- Easy to produce efficient code with. Inefficient constructs should be easily identifiable.

\- No unnecessary complexity. Semantic structure should be consistent and minimize the number of concepts.

\- Easy to implement the language specification. All features should be easy to understand.

\- Machine independence. The language shall not be bound to any hardware or OS details.

\- Complete definition. All parts of the language shall be fully and unambiguously defined.

The exception is possibly the last one, complete definition. But that's debatable as Rust does have a reference, but no one wants to go as far as calling it a spec. (Also, I know some people think Rust has some "unnecessary" complexity, personally I do not). The article goes on to compare to C, but doesn't mention some of the new features of C++ that make it safer, or Rust which is approximately as safe as Ada. So why would I pick Ada over other modern languages?

btw, I really enjoyed Steve Klabnik's post on learning Ada: [https://words.steveklabnik.com/learning- ada](https://words.steveklabnik.com/learning-ada)

<comment><USER26> > \- Easy to implement the language specification. All features should be easy > to understand.

I'm not sure this is at all applicable to rust. Perhaps once there are more than the one, quickly mutating, implementation, we can say that it's easy to implement the specification.

> \- Reliability. The language should aid the design and development of > reliable programs.

This one feels a touch questionable, given the built-in "succeed or die" macros that simplify code at the cost of reliability. There's also the unsafe keyword, and how the impact of an unsafe operation in one section of code (say, an imported library) can have negative impacts on unrelated sections of code otherwise deemed safe.

> \- No unnecessary complexity. Semantic structure should be consistent and > minimize the number of concepts.

Borrow checker aside, there is a ton of complexity in Rust (traits, multiple flavors of arrays, multiple flavors of boxed values).

> \- Machine independence. The language shall not be bound to any hardware or > OS details.

Rust relies on the LLVM project to provide this, and relies on the contributors to the LLVM project to target different architectures.

<comment><USER23> > ...unsafe operation in one section of code (say, an imported library) can > have negative impacts on unrelated sections of code otherwise deemed safe.

Yeah. Just like _every_ line in C/C++ code _can_ have negative impacts on unrelated sections.

While true, that talking point feels somewhat unfair or even in bad faith. Rust requires "unsafe" escape hatch to be able be a low level systems language. Or gasp, to call libraries using C ABI.

I write a lot of low level code in C/C++ (firmware, kernel drivers, low level services) and I think a C ABI compatible "runtimeless" safe language, like Rust, dramatically improve security, safety and even ultimately provide faster time-to-market.

<comment><USER26> This comparison is against Ada's language criteria, not C/C++.

You're well above 100% right with your points, if we weren't looking at the language criteria put forth by Ada.

EDIT: It's worth nothing that Ada is also a system and embedded programming language.

<comment><USER27> Ada has unsafe code as well and messing it up causes exactly the same thing as it does in Rust or C++, so I'm not sure what your point is.

</comment></comment></comment></comment></comment><comment><USER28> I first read about Ada in JARGON:

       Ada:: n. A {{Pascal}}-descended language that has been made
       mandatory for Department of Defense software projects by the
       Pentagon.  Hackers are nearly unanimous in observing that,
       technically, it is precisely what one might expect given that kind
       of endorsement by fiat; designed by committee, crockish, difficult
       to use, and overall a disastrous, multi-billion-dollar boondoggle
       (one common description is "The PL/1 of the 1980s"; hackers find
       the exception handling and inter-process communication features
       particularly hilarious).  Ada Lovelace (the daughter of Lord Byron
       who became the world's first programmer while cooperating with
       Babbage on the design of his mechanical computing engines in the
       mid-1800s) would almost certainly blanch at the use her name has
       been latterly put to; the kindest thing that has been said about it
       it is that there is probably a good small language screaming to get
       out from inside its vast, {elephantine} bulk.

Maybe the situation is different now?

<comment><USER29> The situation hasn't changed, ESR just flat-out never had a good read on Ada. You really cannot take the Jargon file seriously, its author's ignorances are glaring and numerous.

Ada's "elphantine bulk" is smaller than many modern languages, and even some which the Jargon File praises, like Common Lisp. Its inter-process communication and exception handling functionality were relatively forward- thinking at the time and would look familiar to your average Java programmer.

<comment><USER30> The kindest thing one can say about esr is that he is not as clever as he thinks he is.

<comment><USER31> Which is also the least kind thing.

</comment></comment></comment></comment><comment><USER32> I'm missing SPARK, the restricted and formally defined language based on Ada, extending Ada with contracts and aspects, and disallowing the insecure parts. [https://en.wikipedia.org/wiki/SPARK_(programming_language)](https://en.wikipedia.org/wiki/SPARK_\(programming_language\)) This is the real highlight of Ada.

<comment><USER33> Exactly. See this post: [https://news.ycombinator.com/item?id=20934511](https://news.ycombinator.com/item?id=20934511)

</comment></comment><comment><USER34> As a side note for people like me who have no option other than C for their safety critical projects, remember there's a MISRA-C standard. If that feels too much, [1] is a good starting point.

[1] [http://pixelscommander.com/wp- content/uploads/2014/12/P10.pd...](http://pixelscommander.com/wp- content/uploads/2014/12/P10.pdf)

<comment><USER35> Thank you for the link! I think that's really helpful and those are good explanations for each rule.

Does anyone know of a guide for writing C code where you allocate a specific block of memory at the start and then use that for all data from then on? Avoiding malloc is one of the suggestions there and seems like a smart strategy.

<comment><USER36> I've written code exactly like that and realised that it just kicks the can down the road: you're still allocating memory from a fixed block, it's just now the malloc is written by you, with more bugs, and you still need to deal with variable allocation delays and running out of memory. The real issue is if you don't know at compile-time what resources you'll need at run-time. For some problems that can be an intractable problem for making a safe product, including, to my knowledge, everything that runs on a rich OS.

<comment><USER37> >The real issue is if you don't know at compile-time what resources you'll need at run-time. For some problems that can be an intractable problem for making a safe product, including, to my knowledge, everything that runs on a rich OS.

You're right, but you should still constrain yourself to these few instances to use malloc instead of wildly using it everywhere.

</comment></comment></comment></comment><comment><USER38> What about Forth?

I quite like the way it eschews too much abstraction and can go from very low level to high level with a lot less code (and less bugs).

Given the current interest with IoT and the proliferation of cheap micro controllers it might be due for a resurgence(?).

<comment><USER14> I like Forth but I always seem to make my programs too clever in it. If I write them in C or assembly instead it takes longer but has less bugs. Probably people with better self-discipline than I have can do wonders in Forth.

Current micros are a bit big for Forth, though. You can run C or C++ on them. If you have only 4K or 8K of code space and 128–512 bytes of RAM the case for C over Forth gets a lot weaker. Maybe we'll see a resurgence of Forth when we get nanobots.

</comment></comment><comment><USER39> I used Ada (GNAT) about 15 years ago. One of the things that struck me was the accuracy of the compiler error messages and the sophistication of the debugger, when compared to C/C++ in Visual Studio / GCC

</comment><comment><USER40> This article was a decent introduction, I suppose. I've been learning Ada for about a year now, and I quite like it. It's larger than the previously largest language I know, Common Lisp, but I like the focus on reliability and whatnot; it's a language that has many facilities programs need, but you don't need to use otherwise; it's also segmented well, unlike Common Lisp, but there's advantages to both methods.

There's a flaw in the article:

 _Ada doesn 't define standard types like int or float_...

It does, technically, Integer and Float. The rest of the article is fine.

Lastly, it's amusing to see the Rust advocates cry out due to this. As I like to write, Ada is used in critical systems such as ballistic missiles and trains, whereas Rust is used in Firefox.

<comment><USER41> > As I like to write, Ada is used in critical systems such as ballistic > missiles and trains, whereas Rust is used in Firefox.

You mean to say that Ada is good for much simpler, easier, smaller-scope projects?

<comment><USER42> Only a person who has never worked on a safety-critical application would say something ignorant like that.

(I am neither a Rust nor an Ada user.)

<comment><USER41> I have actually worked on safety-critical applications. ISO 26262, MISRA C, ASIL, etc. :D . I even own and drive a car that has my software in it.

I am obviously teasing the OP, but there's IMO a lot of truth to it. Safety- critical stuff damn better be simpler, smaller and fundamentally easier or it will fail and kill people. That's why stuff like [https://groups.google.com/forum/message/raw?msg=comp.lang.ad...](https://groups.google.com/forum/message/raw?msg=comp.lang.ada/E9bNCvDQ12k/1tezW24ZxdAJ) makes sense. In a lot of aspects, mission critical-software is much, much "easier": easier to stretch the budgets, easier to not have competition, easier to justify why something can't be done or why it has to take another 3 years of work.

While a modern fully functional web browser is a huge pile of complexity, technologies, requirements and yet it is still needs to work under much tighter social, economical and performance pressures. Any bug being widely exploited, could lead to people literally dying or at least having their lives ruined. It's just not as spectacular as "missiles".

So I think the OP (and probably you as well :P) is being arrogant by dismissing "firefox", that's all.

<comment> munk-a I think well designed safety critical bare-metal stuff and well designed browsers have a difference in complexity placement - within bare-metal work you need to be aware of and account for the full domain range of values any systems you talk to can produce (including error output) and account for those - while browsers[1] tend to be more emergently complex with relatively secure and safe input but a lot of complexity in how those inputs are handled.

One system is taking a complex world and trying to reduce it to a safe and simple system - the other is taking something safe (some rando user inputs and a pile of HTML) and turning it into something complex - a rendered website.

Granted, I think value domain identification is one of the only ways for complex software to at all survive growing into a legacy system - so maybe the core difference is the nice stress free life of a system where the worst outcome of a critical failure is someone not being able to post on facebook ;P

1\. Lets ignore firefox and JS and just assume we're in the 90's downloading HTML sites...

</comment></comment></comment></comment></comment><comment><USER43> During weekend installfest/hackfest events at a LUG that I used to attend, there was always this one guy who would sit in front of a pair of laptops and code in Ada. One thing I remember about it is just how much it reminded me of Pascal.

<comment><USER44> Ada was built on top of Pascal so they are very similar. Another Pascal language is ST or Structured Text, an IEC industrial automation language specification for PLC's.

I remember fooling with Ada years ago and I really liked the concurrency and ipc mechanisms which was quite unique in the 00's. It was a little more friendly to use vs. pthreads. Now every new language is baking in concurrency. Since I wrote mostly c code I wound up making a franken program which was a statically linked Ada/c. I used Ada for its concurrency which called my linked in c code. It was a PLC emulator I scrapped.

</comment></comment><comment><USER45> When I played with Ada, my feeling was that it allowed a lot of things to lean on the types, protection is one that gets made a lot of fuss about, but also there's a lot of labour saving. You can size something to the length of something else. You can get the max and min of a type (which are user defined, not tied to byte sizes). You can get an array's bounds. Everything "reflows" if you edit the type definitions. It allows you to be very detailed about what you want, and then let other parts of the program lean on that detail. Types become more than a way to catch mistakes, they become a way to describe your intentions.

</comment><comment><USER46> I once flipped through Ada spec (purely voluntarily) and in my opinion it was a really well designed language. I generally come to believe that a language should offer fewer fancy programming constructs, but advance in specifications and definitions, and Ada looked like a solid step in that direction (as compared to C, for example). As it was recently pointed out by some other discussion here at HN the idea of software development is to document knowledge, and Ada is pretty good at that. The modern trend is very different, unfortunately.

</comment><comment><USER47> No you shouldn't be writing in Ada. Embedded software running all kinds of sensitive workloads, from pacemakers to routers/switches use C for it's superior tooling, universal support across compilers and chip vendors, massive user base and decades long best practices (like NASA's C coding guidelines) to mitigate some of C's potential inadvertent misuses.

Not to mention the bevy of advanced niche features, like SIMD support, and custom GCC extensions that lend superpowers to C coders that other languages typically lack.

Sure, ada may have it's benefits for certain narrow use cases, but for non- hobby projects spanning tens/hundreds of engineers, considering real world vendor support for ada and missing talent pool, C is the obvious choice

<comment><USER48> \- You don't need much tooling and coding guidelines if safety aspects which prevent common C errors are built into language design. Despite that SPARK, a subset of Ada makes it more easy to proof program correctness. I'm not sure if it's similarly easy for C.

</comment></comment><comment><USER49> Different types for different units is a great idea. Nim borrowed it from Ada and I assume that there are other programming languages that did too.

</comment><comment><USER50> I really like the language, but the only compiler I'd trust is the adacore one and I imagine it is pretty pricey for commercial work

<comment><USER51> Why not FSF's GNAT? It's been a while since I used it, but I remember preferring its error messages to some commercial offering we had around.

<comment><USER52> AdaCore's compiler is GNAT.

They sell a pro version with bells and whistles but AFAIK the actual compiler is the same.

<comment><USER50> You can't use a lot of the libraries and still get the runtime exception to where it doesn't have to be released as GPL I think.

</comment></comment></comment></comment><comment><USER53> What is the employment market like for Ada?

<comment><USER54> There's some non-DOD avionics floating around that are ADA, I guess because of requirements and regulatory overlaps.

[http://archive.adaic.com/projects/atwork/boeing.html](http://archive.adaic.com/projects/atwork/boeing.html)

<comment><USER55> I've read that SpaceX uses C++. I'm surprised safety critical systems like SpaceX and Tesla don't use Ada. It's a mature safe language used in their industry, yet they choose C++.

From SpaceX's 2013 Reddit AMA: [https://www.reddit.com/r/IAmA/comments/1853ap/we_are_spacex_...](https://www.reddit.com/r/IAmA/comments/1853ap/we_are_spacex_software_engineers_we_launch/)

<comment><USER56> I don't have any experience on this field, but researching the subject some time ago I found that C/C++ is not unusual too. On the safety matter, when used in critical mission systems they usually follow a guideline or framework to ensure the reliability of the software, like MISRA C[0] for exemple. Another important point is that the development is real slow compared to other segments of software engineering and often takes several years to develop, with lots of tests and rigorous compliance with specifications.

Its an interesting field, but feels hard to get into.

[0] [https://en.wikipedia.org/wiki/MISRA_C](https://en.wikipedia.org/wiki/MISRA_C)

</comment></comment></comment></comment><comment> non-entity I toyed with Ada some years ago. I was interesting, and I was fascinated by the type system, but never had any real use for it

</comment><comment><USER57> I believe the Eurofighter Typhoon was and still is programmed in Ada.

<comment><USER58> I believe most NATO weapon systems are programmed in Ada. It just makes _natural_ to integrate anything with the avionics using the available interfaces, specially with the friend-or-foe systems.

</comment></comment><comment><USER59> So one should learn Ada because it doesn't coerce integers? Plenty of modern languages won't do that.

</comment><comment><USER60> Flashbacks to Prof. Feldman's classes

<comment><USER61> Or Dr. McCormick's classes. CS 101 with Ada. Students 2 years behind me got to learn Java or Python.

He wrote 3 books on Ada. [http://www.cs.uni.edu/~mccormic/](http://www.cs.uni.edu/~mccormic/)</comment></comment>


Apple announces Mac OS X 10.8 Mountain Lion - <AUTHOR> http://www.apple.com/macosx/mountain-lion/ <comment><USER2> The thing I'm by far the most excited about is AirPlay Mirroring. If I'm reading this correctly, I'll be able to mirror anything from my Mac to my TV using an Apple TV. This will be great for watching Internet videos, going through my iPhoto library with my wife, looking at home videos, etc. All without needing a stupid cable from my couch to my TV.

The deeper iCloud integration is also intriguing. I assume this means proper syncing between documents on a Mac, iPad and iPhone. This will be a huge feature, and is currently a major stumbling block with iCloud. I want my documents to sync to my mobile devices.

Those two features alone are pretty big. Beyond that, I'm interested to here about the new APIs and anything else that has been changed under the hood.

OS X Lion has always been a little bit buggy (the latest release is pretty solid, however). I wonder if Mountain Lion will be like Snow Leopard where it tightens up a lot of things under the hood and gives us a better realization of the OS.

I'm excited for Gatekeeper for my parents and other people I know that aren't that tech savvy. This could save me a lot of headaches.

<comment><USER3> I am excited as well in AirPlay Mirroring so i watched several times in the demo. It seems video plays with Quicktime. So lot's of video formats are not compatible like mkv's, iso's etc...

If somehow i am able to mirror VLC i will run and buy Apple TV at once.

<comment><USER4> If you install Perian, Quicktime supports expands to include many more formats <http://perian.org/>

But I agree and would welcome the support for VLC too!

<comment><USER3> I already have Perian. It's not supported well imho. Just try to open a 8gb mkv and it broke QT.

<comment><USER5> It didn't break Qt, it broke Perian.

That being said, I've got a couple of 8GB MKV's and they all work perfectly. So caveat emptor and all that ... :P

</comment></comment></comment></comment></comment><comment><USER6> " _OS X Mountain Lion arrives this summer. With all-new features inspired by iPad, the Mac just keeps getting better and better._ "

Am I the only person that doesn't want an ipad on the desktop?

<comment><USER7> No your not. I want my stuff to sync without issues like my notes, contacts, mail but I don't want my laptop/desktop to feel like my phone. Example: Launch pad, is anyone really using this?

<comment><USER8> I never use Launchpad, but I'm glad it's there since I've always had trouble explaining the Applications folder vs the Dock to people, and Launchpad solves that very nicely for non-technical people (especially ones with iPhones/iPads).

</comment></comment></comment><comment><USER9> I really hope they don't try to converge the interfaces too much. The design elements in Lion that were very iOS-like were IMHO the worst.

The thing is: pads and phones are fundamentally different kinds of devices. Their UI paradigm is designed around frequent but brief and relatively shallow interactions, while a PC is for deeper longer-term interactions. Trying convergence here seems like something very easy to botch horribly.

<comment><USER10> Agreed. You really can't have a hybrid of the two. It ends up being neither fish nor fowl -- a suboptimal experience in either form. Either rip off the band-aid, and go swiftly but painfully through the transition to pure-iOS on everything, or keep OSX and iOS relatively separate (if, perhaps, working gradually toward more interoperability).

My guess is that Apple is waiting for the day when cloud computing is the standard, and there is no longer a great deal of need for the hardware-based functionality or design of a laptop. When that day comes, a simple iOS-style interface might be fine for everything. In the meantime, however, there are still plenty of distinct use cases for Macs and iDevices. Arguably, we're still in the awkward adolescence of cloud computing. We know it's going to grow up quickly, but that day isn't quite here yet.

(And let's not forget that Apple is a hardware company and, accordingly, is probably hesitant to hasten the demise of any of its key hardware lines).

</comment></comment><comment><USER11> I for one welcome our new OS-level code signature verification overlords. May they smite evil and incompetence swiftly and brutally...except when 'evil' is defined by foreign governments, domestic law enforcement, or fair competition with built-in features.

With great power comes great "you guys better not fuck this up."

<comment><USER12> "If an app is found to be malware, Apple can revoke that developer's certificate, rendering the app (along with any others from the same developer) inert on any Mac where it's been installed. "

Yeah, it's not a great reach to think that in five years there will be no Option 3 and malware will include any program that the government of the nation that your computer is in deems undesirable. Apple and Microsoft will likely be forced to have such capabilities by various national governments.

<comment><USER13> If you think it's that possible then why not contact your congress person/senator and have them look into this? In fact, talk to them about drafting a law against not being able to install software of your choosing on a machine you buy. Or, at the very least, a law for being able to take your data with you when you decide to leave a platform. This wouldn't help China, Iran, Syria, etc. but it would at least give US citizens some protections.

Personally, I'm not very afraid of option 3 ever going away but I also am ready with a FreeBSD VM instance.

</comment></comment></comment><comment><USER14> Wow, that snuck out without much advanced fanfare (or I missed it).

I first glance, the main (in fact only) feature seems to be porting several iOS apps and features (notes, reminders, game center, etc.) to Mac OS X, and syncing everything together with iCloud.

There is also a Growl clone. Surprised this took so long. Then again, I personally don't like Growl, so I hope nothing depends on it being turned on.

I notice that, so far, there doesn't seem to be any new 'technologies', just (mainly) ports of iOS apps.

Looks very ho hum to me, but then again I have an android phone, so iOS syncing doesn't really interest me.

<comment><USER15> Growl gets a lot of things wrong and stagnated for years with (until recently) no sign of improvement. It was ripe for disruption. Maybe Apple's implementation will be less depressing.

</comment></comment><comment><USER16> It seems like the OS is either defaulting to allowing only only App Store applications or at least only (Apple-)signed applications: <http://www.apple.com/macosx/mountain-lion/security.html>

It's still possible to turn this off, but I have a feeling that we should enjoy our freedom to run GNU grep instead of BSD grep for as long as it lasts.

<comment><USER17> Read what Gruber writes about that Gatekeep feature:

My favorite Mountain Lion feature, though, is one that hardly even has a visible interface. Apple is calling it "Gatekeeper". It's a system whereby developers can sign up for free-of-charge Apple developer IDs which they can then use to cryptographically sign their applications. If an app is found to be malware, Apple can revoke that developer's certificate, rendering the app (along with any others from the same developer) inert on any Mac where it's been installed. In effect, it offers all the security benefits of the App Store, except for the process of approving apps by Apple. Users have three choices which type of apps can run on Mountain Lion:

      * Only those from the App Store
      * Only those from the App Store or which are signed by a developer ID
      * Any app, whether signed or unsigned

The default for this setting is, I say, exactly right: the one in the middle, disallowing only unsigned apps. This default setting benefits users by increasing practical security, and also benefits developers, preserving the freedom to ship whatever software they want for the Mac, with no approval process.

<comment><USER16> Gruber was telling that the Apple ID was going to be free. It isn't. It requires a Mac Developer account as far as I could understand it.

When I was 15 I wrote a Taskbar dialer for Windows 9x and later NT (this was in the modem days. Of course I haven't updated it in ages and the only reason my old webpage is still there is because I found it by accident in an old backup, but here is a google search for it: [https://www.google.com/search?ie=UTF-8&q=RasInTask](https://www.google.com/search?ie=UTF-8&q=RasInTask)).

I published that on the various download pages and it was good enough to even be featured in dead-tree publications.

Back then I had no permission to use a computer ("they make you stupid" was my parents argument) and certainly no credit card to pay anybody to do development - and even then, as a minor I would probably never have gotten that certificate.

With this rule in place I would never have been able to publish that dialer. I would never have felt how it is to make something that others can use and find useful. I would never have ended up where I am today.

Does this stop malware? Does this stop fraudulent call centers? Does this stop malicious people from telling people to turn it off and then still installing the malware? No.

Does it stop people like me from ever getting to their career of their dreams? Likely.

I might be an old fart, but this is _far_ from acceptable.

<comment><USER18> Hold on, XCode is free (without a developer login) you could install that and write the app.

You can then publish it on websites exactly as you did and those who choose the appropriate security setting can run it. You have a smaller audience yes, but you can still do what you did.

And while this doesn't stop Malware, it does raise the bar a little higher.

Out of interest how would you feel about it if developer licenses were free for students?

<comment><USER16> _Out of interest how would you feel about it if developer licenses were free for students?_

I would be much happier (to the effect of actually seeing more good than bad in this restriction) if getting that ID was a matter of filling out a form an passing a turing test - so, for example, if any apple ID could be used to get a signing certificate, that would be much better.

(edit: this is not about the money. It's about they way of payment (minors don't have credit cards) and the required paperwork that, among other things, require you to be an adult)

<comment> k-mcgrady A license is $99. If you can afford a Mac to develop on your can certainly afford a $99 license.

They reason the have the fee is to keep out people who aren't serious about development. If they didn't have it for example the forums would be overrun with people who just signed up to get the latest OS beta complaining about bugs (this is already a problem at $99).

People can still develop and distribute apps without ever signing up with Apple. This restriction is a good protection step for users imo.

<comment><USER19> You shouldn't have to prove that you're "serious about development" by paying money to write and distribute software. How many developers started as hobbyists?

Charging $100 just to be capricious is not a good move and is certainly not a good omen for OS 10.9 "Tabby" wherein you can be almost certain they will remove the option to run unsigned software (for your own protection, of course! You don't want to pay Apple $100? What are you, poor? The computer cost $1000! $generic_strawman_argument!)

<comment> k-mcgrady You don't need to pay ANY money to write software for the Mac. Xcode is free. You don't need to pay any money to distribute software for the Mac. Distribute it through your own website. You need to pay to sell through the Mac App Store. I also presume you need to pay if you want it signed. Well that's a privilege. It helps you prove to potential customers your app is safe. You benefit from it so you should have to pay for it.

If you develop an app with the purpose of selling it on the Mac App Store for profit $100 should not be a problem for you.

If you want to distribute it yourself, go ahead. Apple is not charging you.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> The worrying thing about Apple's Gatekeeper feature isn't that they _may_ impose their moral opinions on apps, but that governments and corporate entities will have the ability to pressure Apple into disabling apps which aren't actually malicious, i.e. Tor & BitCoin.

Whether or not it can be disabled is irrelevant. I don't want to have to instruct my customers about how to essentially jailbreak their Mac just to use my app.

And will it just be .app applications which need to be signed, or will it be all binaries, e.g. Vim and Apache?

Worrying times indeed. I don't particularly want to use Linux, cause I really love OS X's elegance, but I can see switching being a real possibility over the next few years if Apple continues the trend of forcing iOS's walled-garden on OS X.

</comment><comment><USER21> Nothing exciting. Let me quantify this before I get shot by the Apple fanboys. I'm not a Microsoft fanboy either but I am not buying the hype and feature sheet.

Example:

1\. iCloud. Have Windows Live ID and Live Mesh integration in windows for nearly 3 years now. Works across mobile devices already.

2\. Messages. Windows Live Messenger has social integration already which is on par with this.

3\. Reminders. Windows Live calendar does this and gives you alerts through windows live messenger and email.

4\. Notes. NOTHING on this planet compares to Microsoft's OneNote.

5\. Notification center. Windows live has one built in that you can integrate with. Oh and you also have the system tray.

6\. Share sheets. Windows has had "sent to" since about 1996.

7\. Twitter. Windows live integration.

8\. Game center. We have shops for that and Steam and all sorts. It's an open market.

9\. Airplay mirroring. Woo yay etc. Windows media player (!) does this with my Sony Bravia with no complaints. I can right click a video file and select "play on Bravia" and it appears on it straight away. This required NO CONFIGURATION and no special boxes. Both have wireless cards in them. No store or DRM available or required.

10\. Gatekeeper. Windows firewall is actually on par with this and is an application AND/OR system level firewall. Microsoft security essentials is the rest.

11\. Chinese features. Windows is the mainstream OS in china for a reason (i.e. excellent language support).

The only thing above that cost anything is Windows (which cost effectively nothing as it came with the PC) and OneNote (which cost me 200GBP) and included Word, Excel and Outlook as well. Oh and the nice Acer TimelineX machine only cost me 400GBP, TV cost 300GBP so total 900GBP

Compare that to a MacBook which cost more than that to start with at 999GBP.

Oh and I don't have to pay 99GBP to write software that works on it. Visual Studio is free.

Doesn't add up.

Hmm.

<comment><USER22> OneNote only comes with Microsoft Office. Which you can also purchase for Mac. Xcode is free. A developer code signing certificate costs money whether you buy it through Apple or Verisign. Want to release trusted apps on Windows that don't throw up scary looking security warnings to your users that download them? Guess you'll need to pay $299 a year to Verisign or some other CA for that privilege.

Gatekeeper is actually a cool feature because now any developer will be able to release signed applications without going through the app store approval process. If they do nasty things, their certificate gets revoked. You get the benefits to the user of running signed/trusted code, and the benefits to the developer of deploying for free, without app store approval.

<comment><USER23> > A developer code signing certificate costs money whether you buy it through > Apple or Verisign.

According to Gruber, signing OSX apps will be free (which is sensible: it's really a service _to Apple_ )

<comment><USER22> Sorry if I wasn't clear. It still costs $99 for an ADC account to release signed apps through the Mac app store, however, now with Gatekeeper you will also have a free option in case you want to distribute signed apps on your own.

</comment></comment></comment></comment><comment><USER24> You can get the _Messages_ application in beta form here: <http://www.apple.com/macosx/mountain-lion/messages-beta/>

<comment> brown9-2 Expectedly, but somewhat of a bummer, it requires Lion :(

</comment></comment><comment><USER25> According to the screenshots, the spotlight icon is no longer on the top right, getting shuffled over to the left by presumably a new icon to invoke notification center.

That's a really bad choice. The corners are the click targets fastest to reach (see <http://en.wikipedia.org/wiki/Fittss_law> ), and demoting searching in favor of 'reading messages that have popped up before' doesn't strike me as quite well-balanced.

<comment><USER26> It gets worse; can also call it up with a two-finger swipe to the left. Not sure why they're so intent on overloading that gesture.

Two fingers in SL:

* Scroll.

Two fingers in ML:

* Scroll

* or back/forward

* or Notification Center

<comment><USER27> It looks like the two fingers have to come in from the right side of the scroll area (like pulling down on the top of the screen--the right side in this case), so it's distinct from the other meanings.

</comment></comment></comment><comment><USER28> The only thing that I really dislike about iCloud is sharing a computer (with your wife/family).

Our family room computer is a mac mini that is logged into one user account all of the time. It is shared by myself, my wife and my kids. The iPhoto on that account is set up to use my iCloud account. If my wife wants to get her photos (iPhone) downloaded from iCloud she has to log over to an account that only exists for this purpose.

So I'm sure the whole documents, todos, calendar and everything else on 10.8 is going to be a similar pain in the ass for people sharing one computer.

We have to manage three AppleIDs. My iCloud account, her iCloud account and we share an AppleID for purchases from the App Store. They need to fix this for multi-Apple families.

<comment><USER29> Why don't you use multiple user accounts on your Mac Mini? That's pretty much what it is designed for.

<comment><USER7> I agree. For those who want one account for everyone then just register all your devices. If you want everyone in your household to have separate accounts then just have different logins...

</comment></comment></comment><comment><USER30> I know it's not a popular opinion, but yet again I feel like Apple has decided to simply keep status quo with Mac OS X, which is very much the same Mac OS X we got from about 10.3 onwards (Panther, wasn't it)?

Think about how different Ubuntu is now since then. Windows 8 is a real risk- take from a company that does not take risks (whether they were forced to do so or not is another argument). Mac OS X is... Mac OS X again.

I've been using Mac OS X since 10.2, and I will get another Apple machine for my next one, but I really don't know why they bother putting anything out if they're just going to phone it in each time. Pretty much everything added to Lion I really don't care for, and what they did add was minimal anyway.

I wonder if they really have the vision and the tenacity to actually move things forward, or whether iOS and Mac OS X are going to remain the way they are until the company can't take it anymore. They need a software person like hardware needs Johnny Ive. Someone to put their foot down, say "we're doing this" and follow through.

The next 10 years of Mac OS X cannot be the same as the last 10 years, can it?

<comment><USER31> Mac OS is at a point where they simply can't take these drastic jumps that you may see in the competition. For one, they're now at a yearly cycle. Two, the audience has expanded and continues to expand it's user base.

OS X's yearly cycles allows them to take a loyal user base who will upgrade and gradually introduce them to paradigm shifts, like cloud storage. Apple is taking calculated steps to make sure any of their risk taking features are done right and presented to the consumer correctly so they're adopted. I think they definitely have the vision. Something they do even better is have the patience to make sure their vision comes to fruition (mostly) correctly.

I can understand your point, but I'm not sure what progress you want. I'm more inclined to say that you're a segment that Apple doesn't quite need.

<comment><USER30> It seems to me that Apple doesn't think that the Mac is a segment it needs at all.

I would place money on Apple killing the Mac within 10 years, moving all consumers to iOS (which, let's face it, they're doing all by themselves), and releasing Xcode onto a Linux distro and wash their hands of desktop computing once and for all.

Apple clearly doesn't see a lot of future in the desktop, and that may well be right.

</comment></comment></comment><comment><USER32> I'm not sure if this matters or not, but the submitted title calls it "Mac OS X 10.8 Mountain Lion", and 10.8 is indeed the version number I would expect; yet this number is nowhere to be found, neither on Apple's page nor in Gruber's announcement. Instead, it's just called "OS X Mountain Lion" everywhere. I wonder if they dropped the version number, or are downplaying it? But for what reason?

<comment><USER33> I saw a screenshot of the "About This Mac" screen that displayed 10.8 as the version number. I believe it was on the TechCrunch article.

<comment><USER34> This is the article your talking about: <http://techcrunch.com/2012/02/16/os- x-mountain-lion/>

</comment></comment></comment><comment><USER35> is there a specific reason they needed to update the entire OS for this ? Most of the new features are actually apps, and the rest wouldn't really justify a major version change.

<comment><USER36> Well, Ubuntu does this every 6 months. They also pick another silly name every 12. Maybe Ubuntu is becoming the role model here?

<comment><USER37> Every 6-month Ubuntu release has a silly name.

<comment><USER36> Actually, yes. Comes from using LTS-releases only :).

<comment><USER38> LTS releases are every 24 months.

</comment></comment></comment></comment></comment><comment><USER39> It looks like an enormous distraction box. They should top it off with a widget for HN ;)

</comment><comment><USER40> Apple, as usual, really seems to be getting it right. The feature list looks super promising as a nextstep (sorry, had to) in unifying mobile with desktop. It's nice to see that the desktop OS is not being abandoned but instead updated to better reflect a consumers preference for mobile (with good reason). Microsoft has also got it right by tying their Metro interface in Windows 8 to the Windows Phone OS. The attempt, however, falls short in that it is not really unifying the two platforms but instead providing a common interface and feel. In order to truly unite desktop with mobile, I believe you need to go beyond providing a common interface and really integrate the components so they exist to the user simultaneously instead of in parellel. This is just another verification (and in my opinion, a big one) that mobile is taking the reigns and is the future.

</comment><comment><USER41> I really like where Apple is heading with OSX. With iCloud and a common set of features/services iOS and OSX are developing a very symbiotic relationship. It kind of confuses me to see people saying Apple is trying to turn OSX into iOS. It's really the exact opposite from my perspective. They are evolving OSX to be part of a future where SmartPhones/tablets are a major part of how people use technology. There has to be some degree of feature/usability parity for these devices to co-exist happily. Why should my $500 iPad have AirPlay and not my $1500 Mac? If I like using the Reminders app on my iPhone why shouldn't I have it on my Mac? I've yet to see any good argument _against_ these features that doesn't rely pretty heavily on nostalgia or fear of change.

</comment><comment><USER42> I'm all for OS X adopting more and more of iOS because it's great for the user experience. However as a hacker it feels wrong to have a computer that is as locked down as iOS devices. BUT Apple showed me that they are listening and still want to cater to developers when they announced GateKeeper (<http://www.apple.com/macosx/mountain-lion/security.html>).

I have a few friends who are switching to Unix instead of Mac OS X because of the direction it's going. For me, it's going to be all about how much Apple allows developers to innovate on their platform. We'll see what happens, but GateKeeper is a good sign.

<comment><USER43> I agree that I don't like where it is going, but we aren't really the target audience.

I was looking to get CrunchBang Linux running on my MBP, but realistically the battery life change will make the device hard to justify. If I am going to go back to 2-3 hours of battery life, I'm probably going to have to change my hardware setup to get a Thinkpad with a pair of nine cells.

That said, I can't even flip my virtualization set-up, because I doubt that it is going to be smooth sailing (license-wise and technically) running a copy of OS X in VirtualBox or VMware.

</comment></comment><comment><USER44> Feature rundown:

<http://www.apple.com/macosx/mountain-lion/features.html>

One of the more interesting bits is at the - they're supporting a bunch of China specific services.

<comment><USER45> Very interesting. From the features list at the bottom:

*It's a new Mac experience in China. OS X Mountain Lion brings all-new support for many popular Chinese services. And they're easy to set up. Mail, Contacts, and Calendar work with QQ, 163, and 126. Baidu, the leading Chinese search provider, is a built-in option in Safari. The video-sharing websites Youku and Tudou are included in the new Share Sheets, so users in China can easily post videos to the web. They can also blog with Sina weibo, the popular microblogging service. And with improved text input, typing in Chinese is easier, faster, and more accurate."

<comment><USER46> I'm surprised there wasn't a China Twitter equivalent baked in. Or do they just use Twitter?

<comment><USER47> "Sina weibo, the popular microblogging service."? "Microblogging" is the generic term for Twitter clones, is it not?

<comment><USER46> Good point, and the wording is a bit unclear over whether that goes on the "Sharing Sheets" or is more like the Twitter integration.

</comment></comment></comment></comment></comment><comment><USER48> Messages is great, but is there a way to get every iMessage duplicated across iPhone / Mac? Otherwise you send an iMessage, close the mac, grap the iPhone and go away, but never get the reply back. And so forth.

<comment><USER49> Thats the way it works. My iPad, iPhone and now Messages Beta display every message

<comment><USER50> At least 2 weeks ago I also was not seeing that behaivor. I had to unpaid my iPad because I was missing vital messages on my iPhone. Its possible that my iPhone was out of service at the time. But that shouldnt matternn

</comment></comment></comment><comment><USER51> No mention of an OpenGL update. Still waiting out this stone age here...

<comment><USER52> They didn't mention any low-level API changes, which could either mean there are none or they just didn't mention them.

</comment></comment><comment><USER53> The tie-ins to the closed Apple ecosystem are really startling. Take someone like myself. I have no iOS devices and have friends on various operating systems and services. Perhaps I'm a minority, but this is how it breaks down for me.

iCloud - not useful, no iOS devices.

Messages - not useful, too Apple centric, I already use Adium to interface with several non-apple services.

Reminders - not useful, wont' sync to my phone. I already just use CalDAV via iCal for this.

Notes - not useful, wont' sync anywhere, I already use the much better Evernote.

Notification Center - maybe, but it only works with App Store apps of which I have few. I used to use Growl from the command line to notify me when long running computational jobs were completed, but if it's locked to App Store apps I suppose I won't be able to use it for that.

Share Sheets - maybe, but I already use Sparrow instead of Mail and Chrome instead of Safari. I use another photo hosting site that isn't Flickr and don't use Twitter.

Twitter - don't use it.

Game Center - not at all a compelling feature for me.

AirPlay Mirroring - don't have an Apple TV and prefer more open platforms for this.

Gatekeeper - this is a good idea in principle, remains to be seen if it gets in the way.

The exclusive partnering and increasingly closed Apple ecosystem is really showing. Maybe I'm a very small minority, but this direction is not in the slightest bit thrilling to me. Where are all the options to plug your own services into the system?

</comment><comment><USER54> The magic of Mac is that it's BOTH a great developer / hacker machine (POSIX/BSD + GNU tools with great hardware, power mgmt, etc), and a great machine for people who don't know how to use computers.

It's inevitable that the layer for non-techies feels more and more integrated with iOS.

Will we ever lose access to the do-anything BSD box underneath? That will be a sad day for me - Windows+cygwin is an abomination.

<comment><USER55> I can't imagine Apple ever removing the open Unix access in its OS X server due to so many customers relying on it (though I can't really imagine them removing it in the normal OS X either, but who knows). Maybe power users will just have to upgrade to OS X server on their laptops, like Windows NT Workstation.

</comment></comment><comment><USER56> So i need to reboot my Mac after installing the Messages demo? Can't remember ever seeing that with an Apple product other than Xcode.

<comment><USER57> iTunes updates often require a reboot. Previous iWork installs have also.

Most of the time, an actual restart is not required, just logging out and then back in.

</comment></comment><comment><USER58> The next time Apple does this style of announcement, I'm inclined to believe that they may release the info themselves half an hour or so before their embargo ends. The first I heard about this, before there were any changes to the Apple site, was a tweet.

</comment><comment><USER27> Sigh.

Others have hinted at this, but I'll say it outright: I've been a pretty solid Mac user/developer for 25 years (with a 3-year interlude on Windows + ThinkPad towards the end of classic MacOS, when the lack of true multitasking and a "real" operating system just got unbearable).

I suppose it's inevitable, but I really hate to see the Mac become just another part of the whole iOS ecosystem.

There's nothing specific I can point to, but it does feel like the end of general-purpose computing for those of us who really like Apple hardware.

Edit: Perhaps I'm wrong, and the cloudification is happening everywhere: with Chromebooks/Chrome OS, with Win8, etc. So maybe this is the inevitable regardless of which platform(s) one enjoys.

Linux, here we come? ;-)

<comment><USER59> I'm feeling the same malaise. I want to blame it on the Mac App Store, XCode dropping GNU GCC, Gatekeeper, etc. feeling like a slowly tightening noose, but honestly, I don't think that's it. After all, I'm willing to put up with the same sort of signed software model on Android.

Still, if someone can point me to a hassle-free Linux laptop in a MacBook Air form factor, I'll jump ship in a heartbeat.

<comment><USER60> Going to LLVM and dropping GCC is the best single Dev Tools related choice Apple has done since acquiring NeXT.

</comment></comment></comment><comment><USER61> Wow. It's the reverse digital hub strategy. The peripheral devices (iPod, iPhone, iPad) are now more popular than the Mac. So, rather than sunset the Mac, Apple makes it so that if you own own of these devices, a Mac will be the default choice.

</comment><comment><USER62> The walls are slowly going up around the garden...

<comment><USER63> I'm most alarmed with this restriction:

 _iCloud document storage and Notification Center. Both of these are slated only for third-party apps from the Mac App Store. Many developers, though, have been maintaining non-Mac App Store versions of their apps. If this continues, such apps are going to lose feature parity between the App Store and non-App Store versions._

This will affect software from companies such as Adobe where custom installers are necessary and/or the economics of taking a 30% App Store hit is not necessary when they can already reach their customer base. The move strikes me as anti competitive.

</comment></comment><comment><USER64> I wished they'd fix bugs in lion before releasing the next version. Bluetooth problems, wireless connection (mostly with new MBA's, etc ) - there are huge threads on both these issues in the Apple forums. Among many others.

</comment><comment><USER65> Is it just me or is the iMessage Beta icon very very similar to the HipChat icon? :)

<http://cl.ly/3m060G3x1o2X3I1u3I1D>

<comment><USER66> Messages (iChat) has been around far longer than HipChat.

</comment></comment><comment><USER67> Does Mountain Lion allow you to make apps full-screen on non-primary displays? This is the main problem I have with Lion.

<comment><USER68> Agreed. I was more than a little annoyed to discover that I couldn't watch iTunes Store movies full-screen on my HD TV through an displayport-to-HDMI adapter after upgrading to Lion. I actually gave some thought to going back to Snow Leopard but that seemed more bother than it was worth so I started renting movies on the Xbox 360 instead.

</comment></comment><comment><USER69> First off- I think Gatekeeper will further lure the average user into a false sense of security. Second, Apple needs to simplify how users are identified when communicating with iMessages. Third- it's curious that they didn't have a formal announcement.

</comment><comment><USER70> The Messages beta has significantly impacted my productivity in one day. I no longer have to look down at my phone to text while I'm at my desk and instead can chat with my SO all day while I work, and the them it appears like a text message.

</comment><comment><USER71> It's amusing that Gatekeeper's icon looks a lot like Microsoft Security Essentials, but that (and Messages) is probably my main draw - gotta keep the parents safe on their respective all-important iOS and OSX life-centers.

</comment><comment><USER72> How is the iCloud focus going to effect corporate adoption? If you are a large company can you host your own iCloud service on company resources? Does/will apple provide a sas70 for big corporate users?

</comment><comment><USER73> Open letter to every UI designer trying to change 30+ years of usability of desktop interfaces, mouse actions and shortcuts behavior to 'iPad style' that has been out all of 3 years: DON'T!!

</comment><comment><USER74> I'm looking forward to the day when I don't have to worry about my file system and apps just know what files it needs or can view.

iCloud seems to be moving things in that direction.

</comment><comment><USER75> Is it really true that Apple didn't realize it's _already used this cat in an OS X release_?

OSX 10.1 Puma.

Puma, Cougar, and Mountain Lion are names for the same species of cat (Puma concolor).

<comment><USER76> The release code words are just that: code words. They're not meant to represent some kind of underlying biological reality. OS X 10.1 was not code- named "The biological species _Puma concolor_ ", and OS X 10.8 is not code- named "The biological species _Puma concolor_ ".

The code-names "Puma" and "Mountain Lion" are _distinct words_ , ergo they represent different releases. That in biology these words refer to the same species of cat is utterly irrelevant.

</comment></comment><comment><USER73> OS version update for something that Windows would call an 'optional update'. Way to squeeze every drop of PR out of a few new icons Apple!

</comment><comment><USER77> Yawn. A whole OS upgrade to move a few iPad apps to the desktop? Apps I don't even use on my iPad. Hopefully there will be more than this.

</comment><comment><USER37> But they've already had a "Puma" release. Will "Cougar" be next?

Side note: panthers are technically black leopards or jaguars.

</comment><comment><USER78> I wish anything that uses Growl can use notifications out of the box. it's just not going to happen is it?

</comment><comment><USER79> Is the messages beta download broken for anyone else? I would really like to send iMessages from my Mac.

<comment><USER80> Here you go... [http://appldnld.apple.com/MessagesBeta/041-4274.20120216.z5k...](http://appldnld.apple.com/MessagesBeta/041-4274.20120216.z5km/MessagesBeta.dmg)

</comment></comment><comment><USER81> Can anyone comment on any differences in Mission Control (e.g. Spaces) between 10.7 and 10.8 beta?

</comment><comment><USER82> I guess I am looking at Lion and Mountain Lion and not seeing a place for someone who works outside of the Apple target audience. I like the way I use mac books, which is "skin over Unix with usable UX and a mighty fine piece of HW".

I think it's time I started looking at high-end Linux laptops...

</comment><comment><USER83> I'm surprised that there's still no mention of a Mac version of iBooks...

</comment><comment><USER84> Any evidence in the preview that they plan to have 3G in their laptops?

</comment><comment><USER85> So does this imply touchescreens with the iOS Gaming Center to come?

</comment><comment><USER86> notes and reminders are features?? sigh... I miss steve...

</comment><comment><USER87> I hope it doesn't turn out to be Mountain Goat. Lion broke my external displays working properly while in clamshell (closed laptop) mode.

Conveniently, if I connect it to an Apple display, it's magic, but somehow not.

</comment><comment><USER88> Am I the only one afraid of upgrading my Mac in fear of breaking my Ruby gems, MySQL drivers, C libraries, ImageMagick, environment variables, iOS libraries, provisioning certificates, etc?

</comment><comment><USER89> Does anyone else see Notes as an Evernote killer?

</comment><comment><USER90> "Log out, stage left!"

Sorry folks, Couldn't resist.

</comment><comment><USER86> how much you think you should pay? 1000$????? 500$????? nooooooo!! only 99$, you get a clock, paint and even reversi! for only 99$!!

</comment><comment><USER91> Already?

<comment><USER92> they are adopting a 1-year release cycle.

<comment><USER93> Fascinating. I'm still on 10.6: no compelling reason to upgrade.

By the time I _do_ upgrade I'm in for some future shock: like dropping a Victorian gentleman into Haight-Ashbury in 1968.

<comment><USER94> My work laptop is on 10.5.8...

<comment><USER95> I'm still on 10.5.8 too, I want to upgrade but I really don't see any reason why I should.

</comment></comment></comment></comment></comment><comment><USER96> I hope it'll be a free update.

<comment><USER97> You mean like how every other update was free?

It will cost $29

<comment><USER96> Yes, with the difference that the other OS X updates were not just a bunch of iOS Apps ported to the Mac, that why I paid for them and that's why if Mountain Lion is release with a price tag over $0 I'll keep using Lion (and hopefully this will incentivize Apple to make a real OS X update somewhere in 2013-2014).

</comment></comment></comment><comment><USER98> Accidentally bans ultrabooks in the process.

<http://mashable.com/2012/02/15/apple-patents-macbook-air/>

<comment><USER99> Just a design patent [<http://en.wikipedia.org/wiki/Design_patent>], nothing to see here. Don't make your ultra book look like an air and you are fine. (Hint: pay attention to materials, radiuses, colors, and angles.)

How close you can get involves how much tolerance you have for litigation and risking a loss.

</comment></comment><comment><USER100> Right, so they've completely trashed the interface.

</comment><comment><USER101> But where is the Mac Touch hardware ? you could see for a while where touch was it and we have these nice laptops and big iMac displays but we will use a mouse ?! I really want my next imac to be a docking station with a tear away tablet

Windows 8 is definately banking having this sort of hardware in laptops and displays being available. You dont do Metro on the desktop unless you think that kind of hardware will be available in some form at launch. Metro with a mouse is hideous, even for Microsoft...

<comment><USER102> You'd have to either make your operating system work very well with both touch and mouse/trackpad/keyboard (very difficult), treat touch as a gimmick (as with those Windows 7 HP iMac-like things with touch screens), or make touch (which is ergonomically highly problematic on anything but a smallish tablet) the first-class citizen.

</comment></comment><comment><USER103> -I'd probably pay $30 for the Airplay feature alone. -I don't know how Apple thinks they can push these web-enabled apps that only work on their platforms. A chat app that basically only lets you interact with Apple customers is kind of comical. -Gatekeeper won't win over any Apple critics, but it's actually more flexible/open than what a lot of people feared was coming (ie "App Store apps only"). -Notifications and system-wide share buttons are nice touches. I wonder if the share button will be limited to a few Apple-approved services.

<comment><USER99> _A chat app that basically only lets you interact with Apple customers is kind of comical._ – would be. Thankfully you probably know people with AIM, XMPP, or SMS chat identities. And iChat works with those too.

From the official Apple pages: _Messages supports iMessage and instant messaging services such as AIM, Jabber, Google Talk, and Yahoo! Messenger._

<comment><USER104> It would be great if they brought those other protocols to the iOS Messages app as well</comment></comment></comment>


PHP 5.4 is Not twice as fast as 5.3 - <AUTHOR> http://www.lornajane.net/posts/2012/proof-that-php-5-4-is-twice-as-fast-as-php-5-3?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+lornajane%2Fphp+%28LornaJane+PHP%29

<comment><USER2> For some real-world(ish) benchmarks, see : <http://news.php.net/php.internals/57760>

Memory usage is the big winner, e.g. a 50% improvement for Drupal, with performance in terms of requests per second being lower (e.g. 7% for Drupal) but still an improvement. And memory improvements can lead to greater performance improvements when scaling out or on overloaded hardware.

Just to note, this was back in February in a pre-release version of 5.4, and things have improved in a couple of areas since then.

</comment><comment><USER3> I recently did some testing of PHP 5.4 and found pretty much the same thing. Its faster but not _that_ much faster.creating and serializing a huge object to YAML still take about the same time. The only thing I have found is that I get a little bit better performance out of mod_php, and memory usage is down about 20%

<comment><AUTHOR> memory could translate to speed on a busy server but yeah I didn't see much improvement myself either. they really need to switch to a JIT architecture to make an impact.</comment></comment>


Ask HN: Excluding privacy ones, which Firefox plugins do you use regularly? - <AUTHOR> Excluding Ublock Origin, Facebook Container, Privacy badger and the other privacy-focused addons, what other addons you use most often? Personally I couldn't work without Panorama View (to create tab groups on the fly, which will get deleted as soon as I close the window), and for home I live on the shoulders of Speed Dial and Keepa Price Tracker for Amazon items.<p>What other nice ones do you use? <comment><USER2> Coil is a Web monetization provider that streams micropayments to sites with a monetization HTML tag. For $5/month, I support the sites I actually spend time with and then don't feel bad about blocking ads.

[https://coil.com/](https://coil.com/) [https://webmonetization.org/](https://webmonetization.org/)

<comment> mike-cardwell I have a few websites. I figured I'd go set this up. Can't be more than just sticking a meta tag in your html with a bitcoin address in it or whatever right?

No, you need to sign up with coil.com first, and then you need to sign up with some wallet provider as well and hook them up together or something.

Pass

<comment><USER3> How else could it work? Maybe build that.

<comment> mike-cardwell "Can't be more than just sticking a meta tag in your html with a bitcoin address in it or whatever right?"

</comment></comment></comment></comment><comment><USER2> Tab Tosser automatically closes tabs I have ignored for too long to free myself of digital clutter (with some safety features).

[https://www.jeremiahlee.com/tab-tosser/](https://www.jeremiahlee.com/tab- tosser/)

Admittedly, I made it, but other people seem to enjoy it and Apple thought it was such a great idea that it later built the functionality into Safari.

</comment><comment><USER4> I keep changing my addon list bar the privacy focused ones depending on the support an addon gets. These days I'm mostly using these:

1\. Simplify Gmail: Brings the look of the good 'ol Inbox on desktop - [https://addons.mozilla.org/en- US/firefox/addon/simplifygmail...](https://addons.mozilla.org/en- US/firefox/addon/simplifygmail/)

2\. Behave: Addon that recognizes DNS Rebinding attacks to Private IPs - [https://addons.mozilla.org/en- US/firefox/addon/behave/](https://addons.mozilla.org/en- US/firefox/addon/behave/)

3\. Firefox's Multi Account containers: Lifeline of someone with multiple accounts that need switching. Also the superset of the facebook container - [https://addons.mozilla.org/en-US/firefox/addon/multi- account...](https://addons.mozilla.org/en-US/firefox/addon/multi-account- containers/)

4\. YouTube's search fixer: a HN user shared this sometime ago and it's been really handy so far. Removes suggested results and overhauls some UI elements to look cleaner on desktop - [https://addons.mozilla.org/en- US/firefox/addon/youtube-suite...](https://addons.mozilla.org/en- US/firefox/addon/youtube-suite-search-fixer/)

5\. Web Archives: presents cached versions of web pages on more than 10 search engines- [https://addons.mozilla.org/en-US/firefox/addon/view-page- arc...](https://addons.mozilla.org/en-US/firefox/addon/view-page- archive/?src=featured)

</comment><comment><USER5> My [https://histre.com/](https://histre.com/) (Effortless Knowledge Base)

\- Save your open tabs and then restore them later, or in a different browser, or send the collection to someone else [https://histre.com/blog/save-restore- tabs/](https://histre.com/blog/save-restore-tabs/)

\- Highlights in any website that persists even when the website changes [https://histre.com/features/highlights/](https://histre.com/features/highlights/)

\- Shareable notes, tags, and bookmarks

\- Share your Hacker News upvotes with your friends [https://histre.com/blog/share-hackernews- upvotes/](https://histre.com/blog/share-hackernews-upvotes/)

\- Optional tree-style web history

</comment><comment><USER6> I use: user JS, user CSS, request/response rewriter, request blocker, URL rewriter, toolbar fixer, status bar fixer, gopher, cookie editor, relative location bar, script disabling, HSTS disabling, and adding a "view source" option into the download menu.

(But I think, an entirely new web browser should be made up instead, in order to be improved in many ways. For example, one thing I want is a ARIA view, but there is also a lot more, that requires changing things that isn't easily or efficiently or even possibly done by the use of extensions. Other thing would be to allow all pictures (mostly animated pictures) to be treated as videos, so that it can be paused, rewound, fast-forward, etc.)

</comment><comment><USER7> Mostly I use two that I build for myself to solve my own problems.

calm closes all inactive tabs: [https://addons.mozilla.org/de/firefox/addon/calmdown/](https://addons.mozilla.org/de/firefox/addon/calmdown/)

notetab opens a tab to take notes: [https://addons.mozilla.org/de/firefox/addon/notetab/](https://addons.mozilla.org/de/firefox/addon/notetab/)

Maybe someone else will find them useful.

</comment><comment><USER8> Stylish. I'm restyling sites with poor typography like Hacker News to make them more readable on my HiDPI laptop. I also use Vimium and ad blockers.

<comment><USER9> Even after this? [https://appuals.com/firefox-chrome-both-pull-stylish- extensi...](https://appuals.com/firefox-chrome-both-pull-stylish-extension- over-privacy-concerns/)

<comment><USER8> Luckily for me I was mistaken. :) It's Stylus I'm using not Stylish.

<comment><USER9> Whew :)

</comment></comment></comment></comment><comment><USER10> I've installed extensions to un-shorten Twitter links and make Google search results link to pages directly, but they break on a regular basis.

For tabs I use Tree Style Tabs, and a little UI tweak I like is Reload in Address Bar. I also removed all of the space around the address bar because it gives me more space to work with when editing URLs.

I use Pinboard, and the Pinboard+ extension is very unobtrusive. In fact I usually forget to use it :(

</comment><comment><USER2> YouTube Video Downloader to… download videos from YouTube. I mostly used this for conference talks I wanted to queue up and watch while flying, but not traveling so much these days.

[https://addons.mozilla.org/en-US/firefox/addon/youtube- downl...](https://addons.mozilla.org/en-US/firefox/addon/youtube-download-hd- download/)

</comment><comment><USER11> Tampermonkey: modify your favorite sites with JS and CSS

Remove YouTube Recommended Videos, Comments: prevents me from falling down the rabbit hole.

Disable Facebook News Feed: I haven't seen my FB feed since Feb 2019. Love it! I can still lookup friends to see what they are up to, but I don't let an algorithm tell me what is important.

(These are all Firefox extension names, I'm sure their equivalent exists for Chrome).

</comment><comment><USER12> BetterLoopy to autorepeat music videos - [https://github.com/piyushsoni/BetterLoopyForYouTube](https://github.com/piyushsoni/BetterLoopyForYouTube)

</comment><comment><USER13> Dark Reader and Vimium-FF.

Surprisingly Dark Reader is a lot more advanced than most other dark mode extensions, but its privacy policy looks much better privacy-wise.

</comment><comment><USER14> Tree style tabs lets me manage hundreds of open tabs. Auto Tab Discard stops them from crashing my system.

</comment><comment><USER15> Dark Reader, I don't care about cookies, cookie autodestroyer, noJS.

</comment><comment><USER16> Imagus for zooming into pictures

Buster to bypass Google captchas

They both work fine on Chrome also

</comment><comment><USER17> 1password is my big one.

</comment><comment><USER18> Down Them All. Even used in LAN for batch transfers ;)

</comment><comment><USER19> invidio.us redirect from YouTube

Zotero connector

Bulk downloader

Emacs capture

...</comment>