{"id":58854,"date":"2022-04-01T15:24:45","date_gmt":"2022-04-01T14:24:45","guid":{"rendered":"https:\/\/www.microsoft.com\/en-gb\/industry\/blog\/?p=58854"},"modified":"2022-05-25T10:55:54","modified_gmt":"2022-05-25T09:55:54","slug":"themes-in-reliable-computing","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-gb\/industry\/blog\/technetuk\/2022\/04\/01\/themes-in-reliable-computing\/","title":{"rendered":"Themes in reliable computing\u00a0"},"content":{"rendered":"

\"An<\/p>\n

Programming applications that truly must work \u2013 in medicine, transportation, factory automation, and so on \u2013 is different from the software development that most of us do on a daily basis. In general, no one dies or crashes or explodes when our pixels don’t line up or the supermarket\u2019s quarterly sales total is centred rather than right-justified.<\/p>\n

Trust in our computations<\/a> is increasingly a requirement, though, and even those who develop for the relatively forgiving commercial sectors have lessons to learn from those who think about guarantees on a daily basis.<\/p>\n

What’s reliable about computing?<\/h3>\n

Start with a few vocabulary clarifications. “Trust” in computing usually refers to such security considerations as authentication \u2013 are the users who they say they are? \u2013 and authorisation \u2013 are those same users actually permitted to do what they’re asking? “Reliable computing” generally is understood in terms of guarantees: these inputs will yield desired results every time, without exception.<\/p>\n

Programmers usually classify a denial-of-service exploit, for instance, as a security<\/strong> problem, or possibly even a merely operational detail outside programmers’ responsibility. Consider this example, though: suppose an account holder should see in a particular circumstance, \u201cYour current balance is \u00a3154.38.\u201d As a result of an attack on another part of the system resulting in network congestion or the other usual causes, something goes wrong, and the best the application can offer is, \u201c… try again later.\u201d That\u2019s a good message \u2013 certainly better than the esoteric tracebacks some retail applications still show on occasion. The application is correct. It meets its specifications.<\/p>\n

Notice, though, that, for consumers, the application has become unreliable<\/strong>. At this point, consumers hope for a different answer, with no guarantee when it will arrive. The application is simultaneously correct, yet not reliable.<\/p>\n

At an IT level, “reliability” has to do with blowing dust off motherboards, installation of antivirus software, hard-drive defragmentation and minimisation of plugins.<\/p>\n

In some circles, “reliable computing” aims at the rather narrow branch of mathematics that analyses arithmetic results and how precision propagates through them. Most of us, most of the time, have the luxury of indifference about whether “1\/5” displays as “0.20000000”, “0.20000001”, or even something else. For certain specialists, those differences are exactly the domain of “reliable computing”.<\/p>\n

Some dialects of computing culture even swap the meanings of “trust” and “reliability”. The most important point in any teamwork is to agree lucid definitions of what you’re aiming at. For today, we have a general interest in the software dimensions of computing results and the factors that support or interfere with getting the right answers every time.<\/p>\n

Tackling the hazards<\/h3>\n

The sheer volume of categories of interference surprises a newcomer to the field, including at least:<\/p>\n