{"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":"
<\/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 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 The sheer volume of categories of interference surprises a newcomer to the field, including at least:<\/p>\n The biggest countermeasures we’ve invented have to do with our tools. Rather than “artisanal C” on a repurposed operating system (OS), we’re more likely nowadays to program in a language which builds in memory management, to execute on a real-time OS, and to have both in-process memory scanners and OS-level dashboards. As a result, memory misuses are far less common today.<\/p>\n At least, I believe so, and I can find multiple other practitioners who echo this. At the same time, software engineering is barely into its first century of practice; it has been filled with intense change throughout, and we’ve collectively had little opportunity to make even such basic measurements as the frequency through time of memory faults. We’re just at the beginning of the research that can lead to any meaningful conclusions<\/a>.<\/p>\n What does<\/em> make for reliable computing, then? To a large extent, you’ll need to research your own particular domain to answer that question well. Study what has worked with medical devices or space probes for ideas and practices you can test in your own situation, more than “silver bullets” that work magic. In general:<\/p>\n Reliable computing is a worthy goal. Its achievement seems to depend on more than just purchase of the right products or adoption of a particular methodology. Until we know more, assume you’ll need to customise the themes of reliable computing to the specific programming you do.<\/p>\n Cameron takes a look at how trust in our computations is increasingly a requirement, and how commercial sectors can learn from those who think about it on a daily basis.<\/p>\n","protected":false},"author":430,"featured_media":31287,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ep_exclude_from_search":false,"_classifai_error":"","footnotes":""},"categories":[594],"post_tag":[519],"content-type":[],"coauthors":[1842],"class_list":["post-58854","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technetuk","tag-technet-uk"],"yoast_head":"\nWhat’s reliable about computing?<\/h3>\n
Tackling the hazards<\/h3>\n
\n
Explore and adapt best practice<\/h3>\n
\n
Learn more<\/h3>\n
\n