<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Observations from Uppsala</title>
	<atom:link href="http://jakob.engbloms.se/feed" rel="self" type="application/rss+xml" />
	<link>http://jakob.engbloms.se</link>
	<description>Computer Technology: Simulation, Virtualization, Virtual Platforms, Embedded, Multicore and Multiprocessing (by Jakob Engblom)</description>
	<lastBuildDate>Tue, 31 Aug 2010 18:40:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<image>
    <title>Observations from Uppsala</title>
    <url>http://jakob.engbloms.se/favicon.png</url>
    <link>http://jakob.engbloms.se</link>
    <width>32</width>
    <height>32</height>
    <description>Observations from Uppsala - http://jakob.engbloms.se</description>
    </image>		<item>
		<title>S4D Paper on Transporting Bugs with Checkpoints</title>
		<link>http://jakob.engbloms.se/archives/1235?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1235#comments</comments>
		<pubDate>Tue, 31 Aug 2010 18:40:55 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[EDA]]></category>
		<category><![CDATA[Wind River Blog]]></category>
		<category><![CDATA[appearances]]></category>
		<category><![CDATA[computer simulation technology]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[virtual machines]]></category>
		<category><![CDATA[virtual platforms]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[S4D]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1235</guid>
		<description><![CDATA[I have a paper about &#8220;Transporting Bugs with Checkpoints&#8221; to be presented at the S4D (System, Software, SoC and Silicon Debug) conference in Southampton, UK, on September 15 and 16, 2010. The core concept presented is to leverage Simics checkpointing to capture and move a bug from the bug reporter to the responsible developer. It [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2009/09/S4D1.jpg"><img class="alignleft size-full wp-image-941" style="margin: 5px 10px;" title="S4D" src="http://jakob.engbloms.se/wp-content/uploads/2009/09/S4D1.jpg" alt="" width="143" height="62" /></a>I have a paper about &#8220;Transporting Bugs with Checkpoints&#8221; to be presented at the <a href="http://www.ecsi.me/s4d">S4D (System, Software, SoC and Silicon Debug) conference </a>in Southampton, UK, on September 15 and 16, 2010. The core concept presented is to leverage <a href="http://www.windriver.com/products/simics/">Simics </a>checkpointing  to capture and move a bug from the bug reporter to the responsible  developer. It is a fairly simple idea, but getting it to work  efficiently does require that some things are done right. See the longer <a href="http://blogs.windriver.com/engblom/2010/08/transporting-bugs-with-checkpoints.html#more">Wind River blog posting </a>about this topic for a few more details.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1235/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wind River Blog: Interview with a Virtualization Researcher</title>
		<link>http://jakob.engbloms.se/archives/1223?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1223#comments</comments>
		<pubDate>Sun, 29 Aug 2010 07:44:15 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[Wind River Blog]]></category>
		<category><![CDATA[computer architecture]]></category>
		<category><![CDATA[virtual machines]]></category>
		<category><![CDATA[virtual platforms]]></category>
		<category><![CDATA[virtualization]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1223</guid>
		<description><![CDATA[Past Friday, I posted a new blog post in my Wind River blog. It is an interview the PhD student Girish Venkatasubramanian from the University of Florida. He is doing research on virtual machines/hypervisors and how they can be implemented more efficiently by making fairly small changes to the architecture of memory management units. The [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png"><img class="alignleft size-full wp-image-1122" style="margin: 5px 10px;" title="Wind River Logo" src="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png" alt="" width="46" height="46" /></a>Past Friday, I posted a new blog post in my Wind River blog. It is an <a href="http://blogs.windriver.com/engblom/2010/08/interview-with-girish-venkatasubramanian.html">interview the PhD student Girish Venkatasubramanian </a>from the University of Florida. He is doing research on virtual machines/hypervisors and how they can be implemented more efficiently by making fairly small changes to the architecture of memory management units.</p>
<p><span id="more-1223"></span></p>
<p>The area of virtualization is one that I would definitely have looked  at as an opportunity had I started out as a PhD student today. The work  of his group is a good example of how Simics is being used for <a href="http://blogs.windriver.com/engblom/2010/07/academic-simics.html">research and teaching in universities</a> around the world.</p>
<p>Going one level up in abstraction, I note that this is probably the first time I have published an actual interview. I have been active in writing things since high school, but it has pretty much always been direct writing, not interviewing.  However, I really hope that this is not the last. Having a series of user interviews on the Wind River blog could be really neat, as a way to dive deeply into some particular areas of technology. Will be interesting to see if any other university user is interested in being featured.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1223/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VirtualBox SMP</title>
		<link>http://jakob.engbloms.se/archives/1212?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1212#comments</comments>
		<pubDate>Fri, 20 Aug 2010 18:04:40 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[multicore software]]></category>
		<category><![CDATA[virtual machines]]></category>
		<category><![CDATA[CECsim]]></category>
		<category><![CDATA[SMP]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1212</guid>
		<description><![CDATA[I listened to an interesting FLOSS Weekly interview with Adam Hall and Achim Hasenmuller of VirtualBox. For someone interested in virtual machines and hardware simulation, the interview was full of interested tidbits. I think the best part was the discussion on multiprocessing in Virtualbox. VirtualBox is able to give a guest OS up to 32 [...]]]></description>
			<content:encoded><![CDATA[<p>I listened to an interesting <a href="http://twit.tv/floss130">FLOSS Weekly interview </a>with Adam Hall and Achim Hasenmuller of <a href="http://www.virtualbox.org/">VirtualBox</a>. For someone interested in virtual machines and hardware simulation, the interview was full of interested tidbits. I think the best part was the discussion on multiprocessing in Virtualbox.</p>
<p><span id="more-1212"></span>VirtualBox is able to give a guest OS up to 32 virtual processors for its use. The system virtualizes cores so that you can allocate more cores than you have on your host. You don&#8217;t want more active cores than you have physically, or performance might suffer badly (there is a <a href="http://blogs.sun.com/jsavit/entry/virtual_smp_in_virtualbox_3">good blog post hosted by blogs.sun.com about VirtualBox 3 and its SMP support</a>, read it before Oracle decides to kill off all the old content&#8230;).</p>
<p>Second, the development of that SMP support only took some six months. But getting it to work right took 18 months. Sounds like a familiar story for parallelizing software of this kind. The interviewees made it sound like the code for this was utterly complex, and I can believe that too.</p>
<p>VirtualBox makes extensive use of hardware virtualization support on x86  hosts to enhance performance (Intel VT-X and AMD AMD-V). As they see  it, all other alternatives are inferior, including the VmWare tradition  of binary translation and patching. They claimed that VmWare actually  interpreted all of the code in a guest, but I find that a bit hard to  believe.</p>
<p>It is interesting to compare their approach to something like Simics, which was made parallel in the Spring of 2008 with Simics 4.0 Acclerator. The advantage an IT run-time virtual machine like VirtualBox has over a virtual platform like Simics in creating a parallel system is that they can make use of the cache coherence on the host to propagate information between the cores. A virtual platform cannot assume that the host and target are of the same type, which is necessary for this to make sense. It also makes VirtualBox entirely nondeterministic, but that is just plain normal for a physical computer system. One interesting intermediate form here is the IBM CECsim system, where a z-series mainframe is used to simulate a slightly different z-series mainframe, including running multiple simulated processors in parallel. CECsim also makes use of the hardware cache coherence and is nondeterministic.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1212/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wind River Blog: Shiny Old Hardware</title>
		<link>http://jakob.engbloms.se/archives/1213?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1213#comments</comments>
		<pubDate>Fri, 20 Aug 2010 11:10:10 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[Wind River Blog]]></category>
		<category><![CDATA[embedded systeme]]></category>
		<category><![CDATA[virtual platforms]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1213</guid>
		<description><![CDATA[I just posted a blog post called &#8220;Shiny Old Hardware&#8221; at my Wind River blog. In it, I discuss why modeling old computer hardware to build virtual systems make sense. Virtual platforms are just not all about the next-generation stuff.]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png"><img class="alignleft size-full wp-image-1122" style="margin: 5px;" title="Wind River Logo" src="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png" alt="" width="46" height="46" /></a>I just posted a blog post called &#8220;<a href="http://blogs.windriver.com/engblom/2010/08/shiny-old-hardware.html#more">Shiny Old Hardware</a>&#8221; at my Wind River blog. In it, I discuss why modeling old computer hardware to build virtual systems make sense. Virtual platforms are just not all about the next-generation stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1213/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multicore is not That Bad</title>
		<link>http://jakob.engbloms.se/archives/1207?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1207#comments</comments>
		<pubDate>Tue, 10 Aug 2010 18:24:15 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[multicore software]]></category>
		<category><![CDATA[Chris Nicols]]></category>
		<category><![CDATA[David Patterson]]></category>
		<category><![CDATA[hypervisor]]></category>
		<category><![CDATA[Simics]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1207</guid>
		<description><![CDATA[I recently read a couple of articles on multicore that felt a bit like jumping back in time. In IEEE Spectrum, David Patterson at Berkeley&#8217;s parallel computing lab brings up the issue of just how hard it is to program in parallel and that this makes the wholesale move to multicore into something like a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2009/02/opinion.png"><img class="alignleft size-full wp-image-654" title="opinion" src="http://jakob.engbloms.se/wp-content/uploads/2009/02/opinion.png" alt="" width="91" height="69" /></a>I recently read a couple of articles on multicore that felt a bit like jumping back in time. In <a href="http://spectrum.ieee.org/computing/software/the-trouble-with-multicore/0">IEEE Spectrum</a>, David Patterson at <a href="http://parlab.eecs.berkeley.edu/">Berkeley&#8217;s parallel computing lab</a> brings up the issue of just how hard it is to program in parallel and  that this makes the wholesale move to multicore into something like a &#8220;<a href="http://en.wikipedia.org/wiki/Hail_Mary_pass">hail Mary pass</a>&#8221; for the computer industry. In <a href="http://www.computerworld.com.au/article/354261/what_will_do_100_cores_/">Computer World</a>, Chris Nicols at <a href="http://www.nicta.com.au/">NICTA in Australia </a>asks what <strong>you </strong>will  do with a hundred cores &#8211; implying that there is not much you can do  today. While both articles make some good points, I also think they  should be taken with a grain of salt. Things are better than they make  them seem. <span id="more-1207"></span></p>
<form></form>
<p>David Patterson&#8217;s article is very similar in its message to what we  used to hear five years ago as everyone woke up and panicked when  single-core computing ran out of steam. Chris Nicols is extrapolating  from the current state in desktop PCs, and asking how the programs we  run today will work when you have scores of cores rather than two or  four.</p>
<p>The main message in both articles is that software  needs to adapt to multicore, and that this is not happening as quickly  as it needs to. It is clear that automatic parallelization of existing  code is a no-starter, and the Computer World article proposes the use of  domain-specific languages (which I agree is a <a href="../archives/747">very </a><a href="../archives/157">good </a><a href="../archives/264">way </a><a href="../archives/905">to </a>go).  David Patterson is less clear on what he thinks is a good programming  model for multicore, leaving that as an open problem. Patterson does  point out that we have quite a few success stories in parallel  computing. I think it is important to not underestimate the set of  problems which  are amenable to parallelization. In particular, in the  embedded field, we have many naturally  parallel problem domains. For example, networking offers abundant  parallelism as many clients, servers, and data streams are active.</p>
<p>However, both articles also miss some of the things which are  happening to make multicore easier to use, especially in embedded. My  favorite example of a technology that nobody seems to talk about outside  of the embedded field is the hypervisor. With an hypervisor (such as  the <a href="http://www.windriver.com/products/hypervisor/">Wind River Hypervisor</a>), you can take existing distributed systems and consolidate them onto a single multicore device, continuing a <a href="../archives/905">long tradition of multiple-processor programming </a>in  embedded. Also, the hardware-based debug tools which are available for  embedded systems &#8211; including multicore &#8211; do not seem to register at all  with the mainstream researchers. It is really a shame, and hopefully we  can start to change that with conferences like the <a href="http://www.ecsi.me/s4d">S4D</a> where we start to bring  industrial debugging experience to the academic community.</p>
<p>Another aspect which is missing from both articles is any discussion  about the debug and test of parallel software. Coding a parallel program  is one thing, making sure it works is quite another. I think this is an  interesting problem in its own right, as exposing parallel bugs is  often just as hard as writing the buggy code to begin with. <a href="http://www.windriver.com/products/simics/">Wind River Simics </a>is  a tool that can be used to really stress multicore software, thanks to  its ability to vary configuration parameters and inject some extra  delays into the target system. Simics is also a very good tool for  debugging multicore software thanks to its controlled deterministic  execution environment. I have already discussed this in a <a href="http://blogs.windriver.com/engblom/2010/06/true-concurrency-is-truly-different-again.html">Wind River blog post</a>, and I will not repeat the argument here.</p>
<h3>Post scriptum: setting some facts straight</h3>
<p>I  want to quickly correct some factual mistakes in the Computer World  article: the  processor power wall at 130W that he discusses is often much lower in  embedded systems &#8211; a mobile phone drawing 130W would not be very  popular, and in networking infrastructure, the magic limit today seems  to be around 30W. So it all depends, and the Itanium example is totally  irrelevant. In certain mainframe computers, the limit is higher than  that. The same is true for the claimed  upper possible clock speed limit at 4 GHz. This has been surpassed by  several companies, most notably by IBM who clocked the Power6 to 4.7 GHz  a few years ago. However, he is right that we will see cores  multiplying in almost all systems as single cores run out of speed  increases.</p>
<p>As Jack Ganssle said, us embedded folks <a href="http://www.eetimes.com/discussion/embedded-pulse/4023943/Can-t-Get-No-Respect">get no respect</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1207/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microsoft + ARM = ARM64?</title>
		<link>http://jakob.engbloms.se/archives/1204?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1204#comments</comments>
		<pubDate>Tue, 27 Jul 2010 19:57:05 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[business issues]]></category>
		<category><![CDATA[computer architecture]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1204</guid>
		<description><![CDATA[The recent news that Microsoft has taken out an ARM architectural license has caused a lot of speculation about just what this might mean. There are several quite well reasoned ideas around the web, and I have one idea of my own: sixty-four bits. Here is a list of some of the ideas I have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/windows-phone-logo.png"><img class="alignleft size-full wp-image-1205" title="windows phone logo" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/windows-phone-logo.png" alt="" width="66" height="58" /></a>The recent news that Microsoft has taken out an ARM architectural license has caused a lot of speculation about just what this might mean. There are several quite well reasoned ideas around the web, and I have one idea of my own: sixty-four bits.</p>
<p><span id="more-1204"></span></p>
<p>Here is a list of some of the ideas I have seen floating around:</p>
<ul>
<li>They are going to put <a href="http://armdevices.net/2010/07/23/the-secrets-behind-microsofts-new-arm-license/">Windows 7 on ARM </a>to <a href="http://gigaom.com/2010/07/23/4-actions-microsoft-can-take-with-an-arm-license/">defend against Linux in the sub-netbook segment</a>. Certainly a useful move &#8211; but do you need an architecture license for that? It would not make much sense to put Windows on ARM in a way that requires you to have a Microsoft-designed processor core to run it.</li>
<li>It is a case of Apple &#8220;A4&#8243; envy &#8211; if Apple can build their own custom ARM chip for a consumer devices in the tablet space, <a href="http://gigaom.com/2010/07/23/4-actions-microsoft-can-take-with-an-arm-license/">so can Microsoft</a>. I think this makes a lot of sense. But once again, what use is a license to design your own ARM core and ARM instructions? <a href="http://unplugged.rcrwireless.com/index.php/20100723/news/2226/why-microsoft-acquired-an-arm-license/">Apple does not seem to have created a custom processor core</a>, instead using a standard ARM Cortex-A8 core in the A4 chip as far as I understand.</li>
<li><a href="http://arstechnica.com/microsoft/news/2010/07/microsoft-should-cut-out-the-middle-men-and-build-its-own-phones.ars/2">Handheld gaming, building their own phone</a>. It is essentially the A4 envy argument, and I cannot see how an architecture license will help.</li>
<li><a href="http://www.computerweekly.com/Articles/2010/07/23/242079/Microsoft-licenses-ARM-tech-in-bid-to-own-39internet-of.htm">Deeply embedded devices</a>. Microsoft wants to ride the ARM wave into things like power meters and other truly embedded systems. Once again, that might certainly be a good idea &#8211; but why an architecture license?</li>
<li>As a defensive move in the Microsoft-Intel relationship. If Intel is toying with Linux, Microsoft can be toying with ARM. In that context, a few million dollars to acquire a license to do nothing much with it might make sense as negotiation leverage.</li>
</ul>
<p>The best idea I think is the <a href="http://gigaom.com/2010/07/23/4-actions-microsoft-can-take-with-an-arm-license/">server angle</a>. ARM is making inroads into servers where single-thread processor speed is not that important. The power consumption advantage over x86 is significant, as long as you do not need utter speed or very many cores sharing memory.</p>
<p>Power-efficient servers is an area where Microsoft can certainly see the potential for truly revolutionary changes in the IT field. There is no reason why x86 would be the best architecture there, and the fact that x86 is controlled by Intel and AMD makes it very hard for Microsoft to really take part in hardware-software innovation. Essentially, Intel and AMD design the processors, and the software has to adapt. This model is not optimal if you want to really see what you can do with the hardware-software boundary.</p>
<p>Thus, if I think Microsoft might do with the ARM license is to start tinker with the OS interface of the hardware. The beneficiary would be both Microsoft and ARM, since Microsoft innovations for ARM might well become standard in ARM land. For example, an OS might benefit tremendously from small changes in the processor in areas like:</p>
<ul>
<li>Memory management &#8211; a hardware scheme tailored to what Microsoft sees being done in their operating systems and their third-party server software could certainly be very beneficial to efficiency.</li>
<li>Multicore and multithreading &#8211; ARM has some special support in their MPCore designs for communicating between cores in a multicore system. Such support could be extended to help the OS manage both threads and processors across multicore designs. Also, ARM might want some help from Microsoft to design a scalable OS interface that works for tens or hundreds of tightly-coupled cores (rather than the current limit of 4 in ARM Cortex-A9 MP).</li>
<li>More bits &#8211; the biggest architectural problem I see with ARM in servers is that ARM is currently a 32-bit architecture. 32 bits are not enough for even medium servers today. Having Microsoft help ARM design a 64-bit version of the ARM architecture sounds far-fetched, but it is certainly something where a license to change the ARM instruction set would help.</li>
<li>ARM instruction set additions to help build an emulator for x86 instructions on ARM, to allow current  x86-Windows applications to run on an ARM-based device. This is an idea which has been tried in the past and which has never been very successful in the market. ARM currently has a set of instructions which help accelerate virtual machines such as .net and JVM, and I think that is as far as this idea has been proven useful.</li>
</ul>
<p>In summary, the only reasonable use I can see that Microsoft would make of a license to build custom ARM processor cores and tweak instruction sets would be to build better servers, by improving multicore communications mechanisms, upping ARM to 64 bits, tweaking the MMU design, and possibly creating some kind of x86 emulation support.</p>
<p>That said, I think the most likely result is a custom ARM-based chip to power a phone or tablet or other consumer electronics device, running a Microsoft software stack (derived from Win CE/Windows Phone) on Microsoft hardware, all sold as a Microsoft product. Essentially, doing the <a href="http://arstechnica.com/microsoft/news/2010/07/microsoft-should-cut-out-the-middle-men-and-build-its-own-phones.ars/2">Apple all-integrated solution.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1204/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Worm Attacking Industrial Control Systems</title>
		<link>http://jakob.engbloms.se/archives/1200?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1200#comments</comments>
		<pubDate>Wed, 21 Jul 2010 19:18:13 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[embedded software]]></category>
		<category><![CDATA[embedded systeme]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[SCADA]]></category>
		<category><![CDATA[Siemens]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[worm]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1200</guid>
		<description><![CDATA[There is a very interesting worm going around the world right now which is specifically targeting industrial control systems. According to Business Week, the worm is targeting a Siemens plant control system, probably with the intent to steal production secrets and maybe even information useful to create counterfeit products. This is the first instance I [...]]]></description>
			<content:encoded><![CDATA[<p>There is a very interesting worm going around the world right now which is specifically targeting industrial control systems. According to <a href="http://www.businessweek.com/idg/2010-07-17/new-virus-targets-industrial-secrets.html">Business Week, </a>the worm is targeting a <a href="http://en.wikipedia.org/wiki/SCADA">Siemens plant control system</a>, probably with the intent to steal production secrets and maybe even information useful to create counterfeit products. This is the first instance I have seen of malware targeting the area of embedded systems. However, the actual systems targeted are not really embedded systems, but rather regular PCs running supervision and control software.</p>
<p><span id="more-1200"></span>There are two important aspects to this worm, as I see it.</p>
<p>First, it only works due to the fact that the software in question is running on regular Windows PCs.  An  attack on a real embedded OS like Wind River VxWorks or Enea OSE would  be more interesting, and much scarier since that would mean a much more devoted enemy. In this case, the attackers are opportunistic, using the window of vulnerability of a <a href="http://www.microsoft.com/technet/security/advisory/2286198.mspx">new Windows flaw </a>to attack Windows-based plant control systems. They also use <a href="http://blogs.technet.com/b/mmpc/archive/2010/07/16/the-stuxnet-sting.aspx">signed Windows drivers</a>, which is apparently a new development in malware. All quite interesting in its own right, and worth reading about for those interested in security.</p>
<p>Second, the malware spreads using physical movement of USB memory sticks rather than attacks over the Internet or other networks. This makes the very important point that even if systems are not connected to the Internet, they can still be attacked if something crosses the &#8220;<a href="http://en.wikipedia.org/wiki/Air_gap_%28computing%29">air gap</a>&#8221; that separates them from the outside world. In this case, a plant would be infected by using <a href="http://technet.microsoft.com/en-us/magazine/2008.01.securitywatch.aspx">social engineering to make some employee carry an infected USB stick </a>into the plant and putting it into some internal PC. Once the infection is inside the plant, it might spread over networks or by USB sticks moving around inside the presumably protected perimeter.</p>
<p>The lesson I think we can draw from this is that using general-purpose desktop operating systems for critical systems is a bad idea. Using a more obscure real-time OS (or even Linux) would probably reduce the number of vulnerabilities &#8211; but more importantly, it would make it much more difficult to make an infection hop from computer to computer until it reaches its target.</p>
<p>In this particular case, all Windows machines are potential bearers and spreaders of the infection. An attacker can rely on that fact to seed the Windows ecosystems at some place, hoping to get the infection hopping from machine to machine until it reaches something interesting. There is no real need to seed the infection directly into the target plant. If the target systems had been running a different OS, the attackers would have had to get really close to the target, making them easier to stop.</p>
<p>Overall, embedded systems security is something that we need to take much more seriously going forward. As we rely on embedded control systems to run much of the modern infrastructure and economy, we really need to be concerned about how to secure these systems. Security needs to be part of the architecture of embedded systems, including their operating systems (please make them as robust as possible), application designs, and networking systems. Unfortunately, current embedded technology tends to be designed to work, with little care for how they could be broken by an intentional attack. One scary example of this was provided in the <a href="http://www.grc.com/sn/sn-251.htm">SecurityNow podcast episode #251</a>, where a listener shows how easy it could be to take remote control over a car due to carelessly designed fleet management units.</p>
<p><em>Updated information</em></p>
<p>I found some more in-depth information on the issue at <a href="http://www.infoworld.com/d/security-central/siemens-warns-users-dont-change-passwords-after-worm-attack-915?page=0,0&amp;source=rss_security_central">Infoworld</a>. It notes that the software that is attacked is vulnerable since all installations use the same password to login &#8211; changing it is likely to break it. That is totally ridiculous as a security solution, period.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1200/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Product Holes: Greatest Hits break iPod Cover Flow</title>
		<link>http://jakob.engbloms.se/archives/1190?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1190#comments</comments>
		<pubDate>Sun, 18 Jul 2010 19:20:55 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[gadgets]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[Billy Idol]]></category>
		<category><![CDATA[Bruce Springsteen]]></category>
		<category><![CDATA[coverflow]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[Robbie Williams]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1190</guid>
		<description><![CDATA[Following on my previous posts about broken phone browsers, phones, and cars, here is another case of &#8220;why didn&#8217;t they catch this in testing?&#8221; We recently got ourselves an iPod Touch, to entertain our oldest child on long trips. It is a brilliant device in many ways, I can understand why people love their iPhones [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/06/happy-key.png"><img class="size-full wp-image-1148 alignleft" style="margin: 5px 10px;" title="happy key" src="http://jakob.engbloms.se/wp-content/uploads/2010/06/happy-key.png" alt="" width="95" height="97" /></a>Following on my previous posts about broken <a href="http://jakob.engbloms.se/archives/1147">phone browsers</a>, <a href="http://jakob.engbloms.se/archives/1185">phones, and cars</a>, here is another case of &#8220;why didn&#8217;t they catch this in testing?&#8221;</p>
<p>We recently got ourselves an iPod Touch, to entertain our oldest child on long trips. It is a brilliant device in many ways, I can understand why people love their iPhones (even though I am very happy with the very different style of the Blackberry phone that I was given by my employer). However, I have found one weird behavior in the music player that leaves me wondering how it got through into the shipping product.</p>
<p><span id="more-1190"></span>The issue appears in the Cover Flow presentation of music, when I have several songs from different albums &#8211; but these albums have the same name. That is most obvious in the case of albums called &#8220;Greatest Hits&#8221;. I have quite a few of those by various artists, and I have synched only a few select songs from a few of those onto the iPod. In this precise case, there are two songs by  Billy Idol, one by Robbie Williams, and two by Bruce Springsteen (revealing my boring music taste I guess&#8230;).</p>
<p>We start coverflow and find an album &#8220;Billy Idol&#8221; and &#8220;Greatest Hits&#8221;:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-1.png"><img class="aligncenter size-full wp-image-1192" title="photo 1" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-1.png" alt="" width="480" height="320" /></a></p>
<p>So far so good. Now touch it, and turn it around to see the songs in the album:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-21.png"><img class="aligncenter size-full wp-image-1193" title="photo 2" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-21.png" alt="" width="480" height="320" /></a></p>
<p>This is starting to look interesting. The two first songs make sense&#8230; but the three later ones are not by Billy Idol.  When I tapped the third song to play it, the display turned into play mode:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-3.png"><img class="aligncenter size-full wp-image-1194" title="photo 3" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-3.png" alt="" width="480" height="320" /></a></p>
<p>When I then turned the iPod back to landscape mode to see coverflow, things have changed in a strange way. We are still at the same position in the list of albums, but the artist and cover picture have changed to now depict Robbie Williams. Funny. This means that this album is out of sort order (as the sorting is clearly by artist name in this view).</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-4.png"><img class="aligncenter size-full wp-image-1195" title="photo 4" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-4.png" alt="" width="480" height="320" /></a></p>
<p>Tapping that album to view the songs on it, we have a very confused display. The album artist is Robbie Williams. The songs are the same as in the first picture above. The small icon of the album cover is Billy Idol, though. Interesting.</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-5.png"><img class="aligncenter size-full wp-image-1196" title="photo 5" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/photo-5.png" alt="" width="480" height="320" /></a></p>
<p>To me, this looks like someone at Apple thinks that album names can be used as unique identifiers for certain tasks, such as displaying album covers in Cover Flow. How that fell through testing amazes me, but maybe it only happens if you synch partial albums? It once again shows how hard it is to imagine and test all the odd cases that might happen out in the real world once a product (hardware or software or a combination thereof) is given to real users.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1190/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Product Holes: Tesla Roadster &amp; iPhone 4</title>
		<link>http://jakob.engbloms.se/archives/1185?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1185#comments</comments>
		<pubDate>Sat, 17 Jul 2010 11:57:58 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[gadgets]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[transportation]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[cars]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[Tesla]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1185</guid>
		<description><![CDATA[Continuing on the thread from my previous post about the testing of products that fail to find problems that become obvious to (some) users after a very short time, I just read an article (in Swedish) about how the famed Tesla roadster cars behaved when they were confronted with Scandinavian winters. Basically, they stopped working [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/06/happy-key.png"><img class="size-full wp-image-1148 alignleft" style="margin: 5px 10px;" title="happy key" src="http://jakob.engbloms.se/wp-content/uploads/2010/06/happy-key.png" alt="" width="95" height="97" /></a>Continuing on the thread from my previous post about the testing of products that fail to find problems that become obvious to (some) users after a very short time, I just read an <a href="http://www.nyteknik.se/nyheter/fordon_motor/bilar/article2441665.ece">article </a>(in Swedish) about how the famed Tesla roadster cars behaved when they were confronted with Scandinavian winters.</p>
<p><span id="more-1185"></span>Basically, they stopped working due to a problem with cooling (!). The roads around here tend to be salted in the Winter. The temperatures also often hover around freezing, with the result that you have roads covered in snow-water slush. This slush clogged up cooling fans for the motors and electronics which are located on the bottom of the cars, around the rear axle.</p>
<p>Putting fans on the bottom of a car where things from the road are quite likely to enter would seem totally silly in hindsight. The root cause is somewhat jokingly referred to as the cars being  designed in sunny California. There is probably some truth to that, even  though all big automakers make sure to cold-weather test their cars in  places like <a href="http://www.arvidsjaur.se/sv/Naringsliv/Test-och-ovningsverksamhet/">Arvidsjaur</a>.  However, that is probably <em>too </em>cold to get much of the slush that caused the issue.</p>
<p>Another issue that has been much more publicized is the <a href="http://arstechnica.com/apple/news/2010/06/putting-hard-numbers-to-the-iphone-4-antenna-issue.ars">Apple iPhone 4 reception problems</a> when holding the phone in certain ways. Also obvious when discovered, but not found in pre-launch testing. Some people speculate that this is due to too much secrecy at Apple <a href="http://arstechnica.com/apple/news/2010/06/new-iphone-4-antenna-causing-potential-reception-issues.ars">preventing a shake-out test </a>with many people using the phones every day in the way they would post-launch.</p>
<p>Once again we see that good testing and destructive creativity is needed during the development of products to make them truly great and avoid embarrassing &#8220;obvious&#8221; mistakes. Tesla and Apple have great product designers and great products &#8211; but you seem to also need great testers to really build solid products.</p>
<p>Sounds like this is turning into a testers lament &#8211; and I must confess to never having worked as a professional tester, just as an accidental tester with a knack for breaking things.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1185/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Off-Topic: Voxel Graphics at Legoland</title>
		<link>http://jakob.engbloms.se/archives/1169?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1169#comments</comments>
		<pubDate>Wed, 07 Jul 2010 19:47:47 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[off-topic]]></category>
		<category><![CDATA[Airbus]]></category>
		<category><![CDATA[cars]]></category>
		<category><![CDATA[Denmark]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[lego]]></category>
		<category><![CDATA[Legoland]]></category>
		<category><![CDATA[Volvo]]></category>
		<category><![CDATA[voxel]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1169</guid>
		<description><![CDATA[Legoland is full of cool and interesting Lego models, built from millions and millions of Lego bricks. The creations don&#8217;t have too much in common with the standard Lego kits sold in stores. Rather, they are advanced uses of Lego bricks that look like something from the real world &#8212; especially at a distance. Up [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/icon.jpg"><img class="size-full wp-image-1182 alignleft" style="margin: 10px 5px;" title="icon" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/icon.jpg" alt="" width="83" height="80" /></a>Legoland is full of cool and interesting Lego models, built from millions and millions of Lego bricks. The creations don&#8217;t have too much in common with the standard Lego kits sold in stores. Rather, they are advanced uses of Lego bricks that look like something from the real world &#8212; especially at a distance. Up close, they are very blocky and not as smooth and polished as regular Lego models.</p>
<p>Essentially, they are voxel graphic representations that must be very hard to plan and execute.  The standard single-stud 1&#215;1 Lego brick is their smallest unit, or maybe its 1/3 height flat version. Here are some examples that I photographed in Legoland during my visit this Summer.</p>
<p><span id="more-1169"></span>Airbus A380, close to the entrance:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/P11305881.jpg"><img class="aligncenter size-full wp-image-1171" title="P1130588" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/P11305881.jpg" alt="" width="678" height="316" /></a></p>
<p>If we look up close at the nose, we see the stepping of voxels very clearly:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130590.jpg"><img class="aligncenter size-full wp-image-1172" title="P1130590" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130590.jpg" alt="" width="509" height="428" /></a></p>
<p>The wing roots show how the wings are constructed:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/P11305891.jpg"><img class="aligncenter size-full wp-image-1174" title="P1130589" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/P11305891.jpg" alt="" width="698" height="402" /></a></p>
<p>I also really liked this Volvo XC90 that I found in one of the town displays. It uses a few more types of elements compared to the big Airbus. I am not so sure about the way they do the windows, but maybe the murkiness is just due to its having been outdoors for a few years. It is interesting though that you immediately recognize this as a Volvo, which is a great testament to the Lego designers.</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130598.jpg"><img class="aligncenter size-full wp-image-1175" title="P1130598" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130598.jpg" alt="" width="430" height="302" /></a></p>
<p>Another car is the Citroen found on the canalside in Amsterdam:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130599.jpg"><img class="aligncenter size-full wp-image-1179" title="P1130599" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130599.jpg" alt="" width="700" height="429" /></a></p>
<p>A typical example of the large-scale animals and people present all over Legoland:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130470.jpg"><img class="aligncenter size-full wp-image-1180" title="P1130470" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130470.jpg" alt="" width="600" height="512" /></a></p>
<p>Finally, a Danish flag in a very traditional Lego flat style:</p>
<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130534.jpg"><img class="aligncenter size-full wp-image-1176" title="P1130534" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/P1130534.jpg" alt="" width="475" height="341" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1169/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Off-Topic: Lalandia Billund (Vacation)</title>
		<link>http://jakob.engbloms.se/archives/1162?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1162#comments</comments>
		<pubDate>Tue, 06 Jul 2010 19:40:31 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[off-topic]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[Billund]]></category>
		<category><![CDATA[Denmark]]></category>
		<category><![CDATA[lalandia]]></category>
		<category><![CDATA[vacation]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1162</guid>
		<description><![CDATA[Another Summer vacation has come around, and as usual that causes a blog post or two on Summer tips and comments on places where I have been. This year, we went down to Denmark to visit the city of Billund, home to Legoland and Lalandia. Lalandia is an interesting mix of indoors activity center and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/lalandialogo.png"><img class="alignleft size-full wp-image-1163" style="margin-left: 5px; margin-right: 5px;" title="lalandialogo" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/lalandialogo.png" alt="" width="136" height="64" /></a>Another Summer vacation has come around, and as usual that causes a blog post or two on Summer tips and comments on places where I have been. This year, we went down to Denmark to visit the city of Billund, home to Legoland and Lalandia. <a href="http://www.lalandia.dk/uk/Pages/forside.aspx">Lalandia </a>is an interesting mix of indoors activity center and camping village. We rented a house there for our vacation, and are overall very pleased with the place.</p>
<p><span id="more-1162"></span>The houses at Lalandia are all very new, the block where we stayed (the one furthest away from the central building) cannot be more than two years old. They have not finished the roads yet, nor are the lawns completely grown up.</p>
<p>Everything feels fresh and new, and you cannot complain about the standard of the houses.You have a fully equipped kitchen, as well as a dishwasher and a washing machine &#8211; families with children is clearly the target audience. You do need to bring some basic household supplies with you from home, there are no spices, washing powder, or dishwasher tables available in the houses. You have to pay for electricity and water in addition to the basic rent, which feels unnecessarily stingy as the basic rent is pretty high and the cost for utilities ends up being about one or two percent of the cost. I guess it is a way to steer people towards not wasting resources, though.</p>
<p>Lalandia is intended mainly for visitors who come by car. Each house has two parking spaces in front of it, and the idea is clearly that several families can share a house. The smallest houses are sufficient for four adults, we rented a six-person house (which worked well with five adults and two children), and there are also eight-person houses available in a few different styles. Since the place is next door to Billund Airport, you could also fly in, distances are short enough that you don&#8217;t really need a car during your stay anyway (you can literally walk from the airport terminal to Lalandia and Legoland). The airport does cause the occasional burst of noise as aircraft take off, but is was not really bothersome while we where there.</p>
<p>Since you are likely to cook most of your food yourself, you also need to go buy it somewhere. There is a somewhat pricey &#8220;supermarket&#8221; in the main building, which is almost impossible to avoid thanks to its convenient location and good opening hours. Shopping in downtown Billund is about ten minutes walk away, but this being a small town, shop hours are pretty poor, 9-18 or 9-19, shorter on Saturdays and closed (!) on Sundays. This was  a surprise for someone used to Swedish shop hours which tend to be 10-22 all days all weeks. Try to arrive on a weekday, or bring lots of supplies for the first day.</p>
<p>It also seems that Denmark is not quite as credit-card-friendly as other countries. If you use a foreign card, they charge you, the customer, the 2.5 to 3% charge that the credit card company charges the store. This is something I have only seen in very small shops living on tight margins in Sweden, and in the Netherlands. In everyday life, this never happens in Sweden or the US, or in most other countries. The fact that Denmark is outside the Eurozone makes some of these charges possible, since the tougher EU rules against card charges currently only applies to transactions in Euros. To be fair, Lalandia actually has lower credit card charges than other places in Billund.</p>
<p>I read a number of online reviews of Lalandia, and they tended to complain that Denmark is expensive. I can agree, it feels about 20-25% more expensive than Sweden, but it is not astronomical or any worse than downtown München or Paris or London.</p>
<p>Lalandia itself is really not about the houses or the food or credit card charges, though. It is a waterpark, and the hangar-like main building contains the Aquadome, biggest waterpark I have ever seen. It also holds a fairly camp indoor fake Mediterranean town square (with a roof painted like a blue sky), an indoors playground, a gym, and several restaurants (which we never tried). It reminds me of the plastic fake milieus in Disneyland Florida.</p>
<p>The Aquadome is just fantastic! It is claimed to be the biggest water park in Scandinavia, and I can certainly believe that. It is all indoors, except a small section on the outside that you can swim out to from the inside. It has the best water slides I have ever tried, all of which require you to use some form of craft to go down. They also all leave the building and come back in, making for a very dramatic ride. See the picture below for how the water slides protrude from the building. The biggest tube is a water slide where you ride four people at once, on a four-person rubber raft!</p>
<p style="text-align: left;"><a href="http://jakob.engbloms.se/wp-content/uploads/2010/07/lalandia.jpg"><img class="aligncenter size-full wp-image-1164" style="margin-top: 10px; margin-bottom: 10px;" title="lalandia" src="http://jakob.engbloms.se/wp-content/uploads/2010/07/lalandia.jpg" alt="" width="536" height="362" /></a>There were pools with activities suitable for children as small as one year, and all the way up to those who rather 40 than 4 years old.  Very impressive. You need several visits to explore all the options, and fortunately unlimited access is part of the package with the holiday homes.</p>
<p style="text-align: left;">It is annoying that they do not allow you to bring your own food inside.  Since we have some allergies in the family, it is not that easy to find  food that is safe, and we would much prefer to bring our own. Overall,  you do get the feeling that they are trying a bit too hard to make you  part with your money; it is a bit too aggressive to feel entirely right.</p>
<p style="text-align: left;">Legoland Denmark is right across the street from Lalandia&#8217;s main building, and I will write a separate blog post about that.</p>
<p style="text-align: left;">A final note is that the ownership structure of Lalandia is interesting. Each house is actually privately owned, and the Lalandia company is just a broker organizing the renting-out of the houses. The are still selling houses, and claim that the yearly cost with mortgages is no higher than the cost of renting for a week. It does look like quite a few Norwegians have taken up on the offer, judging from the large number of expensive cars from Norway we saw parked in front of something like half the houses.</p>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1162/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wind River Blog Post: Scripting or Programming?</title>
		<link>http://jakob.engbloms.se/archives/1159?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1159#comments</comments>
		<pubDate>Mon, 28 Jun 2010 19:08:00 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[Wind River Blog]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1159</guid>
		<description><![CDATA[I have a blog post called &#8220;When is Scripting Really Programming&#8221; up at the Wind River blog network. In that post, I discuss how scripting is really not clearly separated from &#8220;real programming&#8221; in the way I once believed it was&#8230; today, the line between higher-level programming languages and scripting languages look very thin in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png"><img class="alignleft size-full wp-image-1122" style="margin: 5px 10px;" title="button-quicklink-blogs" src="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png" alt="" width="46" height="46" /></a>I have a blog post called &#8220;<a href="http://blogs.windriver.com/engblom/2010/06/scripting-or-programming.html#more">When is Scripting Really Programming</a>&#8221; up at the Wind River blog network. In that post, I discuss how scripting is really not clearly separated from &#8220;real programming&#8221; in the way I once believed it was&#8230; today, the line between higher-level programming languages and scripting languages look very thin in many cases. I illustrate with examples from Simics and its CLI and Python scripting systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1159/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Third Swedish Workshop on Multicore: Call for Papers</title>
		<link>http://jakob.engbloms.se/archives/1156?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1156#comments</comments>
		<pubDate>Sat, 26 Jun 2010 18:34:55 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[MCC]]></category>
		<category><![CDATA[Swedish Workshop on Multicore Computing]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1156</guid>
		<description><![CDATA[The call for papers for the third annual Swedish Workshop on Multicore Computing (MCC10) is now out! MCC is a nice venue for multicore research about everything from computer design to software and debug. It is fairly informal, but still attracts some good papers and provides good discussions. It is not restricted to Swedish submissions, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-124 alignleft" style="margin: 0px 10px;" title="coreshrink" src="http://jakob.engbloms.se/wp-content/uploads/2008/05/coreshrink.png" alt="" width="100" height="100" /></p>
<p>The <a href="http://www.chalmers.se/cse/mcc10-en/call-for-papers">call for papers for the third annual Swedish Workshop on Multicore Computing (MCC10) </a>is now out! MCC is a nice venue for multicore research about everything from computer design to software and debug. It is fairly informal, but still attracts some good papers and provides good discussions. It is not restricted to Swedish submissions, in 2009 there were several international participants. I gave a <a href="http://jakob.engbloms.se/archives/1023">keynote talk about multicore and Simics</a> at last year&#8217;s MCC, and for this year, I am on the program committee and looking forward to many great submissions to review!</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1156/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wind River Blog: True Concurrency is Different</title>
		<link>http://jakob.engbloms.se/archives/1151?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1151#comments</comments>
		<pubDate>Fri, 18 Jun 2010 20:24:04 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[Wind River Blog]]></category>
		<category><![CDATA[multicore computer architecture]]></category>
		<category><![CDATA[multicore debug]]></category>
		<category><![CDATA[multicore software]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Simics]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1151</guid>
		<description><![CDATA[I have another blog up at Wind River. This one is about multicore bugs that cannot happen on multithreaded systems, and is called True Concurrency is Truly Different (Again). It bounces from a recent interesting Windows security flaw into how Simics works with multicore systems.]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png"><img class="alignleft size-full wp-image-1122" style="margin: 5px 10px;" title="button-quicklink-blogs" src="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png" alt="" width="46" height="46" /></a>I have another blog up at Wind River. This one is about multicore bugs that cannot happen on multithreaded systems, and is called <a href="http://blogs.windriver.com/engblom/2010/06/true-concurrency-is-truly-different-again.html#more">True Concurrency is Truly Different (Again). </a>It bounces from a recent interesting Windows security flaw into how Simics works with multicore systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1151/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Poking Holes in Products</title>
		<link>http://jakob.engbloms.se/archives/1147?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1147#comments</comments>
		<pubDate>Mon, 14 Jun 2010 09:42:43 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[embedded software]]></category>
		<category><![CDATA[embedded systeme]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[software testing]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1147</guid>
		<description><![CDATA[I recently started using a new mobile phone, a Blackberry Bold 9700. I am a bit ambivalent on some of its design features, but it is certainly a very different device from the much more friendly SonyEricsson I had before. Like anybody would do, I have been playing around with it to see what it [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/06/happy-key.png"><img class="alignleft size-full wp-image-1148" style="margin: 5px 10px;" title="happy key" src="http://jakob.engbloms.se/wp-content/uploads/2010/06/happy-key.png" alt="" width="95" height="97" /></a>I recently started using a new mobile phone, a Blackberry Bold 9700. I am a bit ambivalent on some of its design features, but it is certainly a very different device from the much more friendly SonyEricsson I had before. Like anybody would do, I have been playing around with it to see what it can do and what not (notable things not working: the &#8220;AppWorld&#8221; application store is not available in Sweden, YouTube videos do not play in any way that I can figure out).</p>
<p>And almost inevitably, as you play around with a complex modern piece of software (which is what most of the phone is, after all), you find some <strong>obvious </strong>things which are just plain <strong>broken</strong>. You wonder, &#8220;why didn&#8217;t they think of this&#8221;, and &#8220;how could this ever escape testing?&#8221; My current best example is that the built-in web browser does not render the pages from Blackberry&#8217;s own support knowledgebase.</p>
<p><span id="more-1147"></span>This is something that they have control over from both sides, so the only reasonable explanation is that they just have not thought to test that site with the browser. It seems strange that  a new user would uncover such holes after a few hours, when presumably thousands of planned and spontaneous testing hours are being spent at Blackberry on each device they release.</p>
<p>To be fair, this is not a showstopper for me, it is just a good example of how users tend to poke holes in all modern software products. Blackberry is not unique in this regard, and I fully admit that the software that I have worked on over the years did not always fulfill the requirement of being bulletproof. There is a classic saying that if you think something is foolproof, you just haven&#8217;t found the right fool yet.</p>
<p>So what is this telling us about software development? I think the main lesson is that you need people who just use your product and do so creatively, as part of the development process. Software developers usually lack the destructive imagination necessary to really poke holes in what they have created, and are usually not given time to develop elaborate test cases.</p>
<p>The moment you put code into the hands of users, you can expect them to find &#8220;obvious&#8221; issues in your product &#8211; simply because their &#8220;normal&#8221; use is something you yourself never dreamt could happen. In my example, I presume that Blackberry assumed that people will use the support forum when their phones don&#8217;t work &#8211; and therefore not surf to them from a phone. Sounds reasonable, until you press on a bit and ask if someone might not look at a friend&#8217;s broken phone out in the field and need to search support&#8230; or check for solutions to non-fatal errors.</p>
<p>I guess the key lesson for me, one which I apply in my daily work, is that product management, marketing, or testing, has to work through use cases with the software they create. Really work them through, and when sidetrack ideas appear, follow through on them, not ignore them to focus on the main task at hand. We have to combine features, and do more than what&#8217;s in typical tutorials.</p>
<p>Feature combination is especially powerful, I still recall the sense of &#8220;aha&#8221; I got when as a PhD student I talked to some colleagues <a href="http://www.it.uu.se/research/publications/lic/2000-006/">researching the field of feature interaction</a>. It sounds like quite an interesting field, even though I am not sure how you could formally capture something that will generate the test case &#8220;read our support site using the phone browser&#8221;&#8230;</p>
<p>This post used to end in &#8220;I guess this counts as a software development rant&#8221;. Now, I classify this as a &#8220;tester&#8217;s lament&#8221;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1147/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>More Kindgarten Robot Videos Online</title>
		<link>http://jakob.engbloms.se/archives/1140?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1140#comments</comments>
		<pubDate>Sun, 06 Jun 2010 07:57:13 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[embedded systeme]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Kindergarten]]></category>
		<category><![CDATA[lego]]></category>
		<category><![CDATA[MEPROM]]></category>
		<category><![CDATA[Mindstorms]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1140</guid>
		<description><![CDATA[I have now torn down the Kindergarten Robot, as I wanted to build some other things. However, before tearing it down, I did take a few more movies of its critical functions. The first movie is just the robot driving around using its MEPROM programming unit. I think this movie is slightly clearer than the [...]]]></description>
			<content:encoded><![CDATA[<p>I have now torn down the Kindergarten Robot, as I wanted to build some other things. However, before tearing it down, I did take a few more movies of its critical functions.</p>
<p><span id="more-1140"></span></p>
<p>The first movie is just the robot driving around using its MEPROM programming unit. I think this movie is slightly clearer than the old one I posted.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/0btgDZ7Pf-g&amp;hl=sv_SE&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/0btgDZ7Pf-g&amp;hl=sv_SE&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Next, here is how a program loop can be created in this system. By removing the white end marker from the program, the motor will just keep spinning the program until it spots a program step. This is a very mechanical infinite loop.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/ngL9oxv5cds&amp;hl=sv_SE&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/ngL9oxv5cds&amp;hl=sv_SE&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Finally, we have the emergency stop bumper that was added to the robot to make it stop when it hits something. It does not take effect immediately due to the latencies involved in the NXT programming environment, but at least the robot does not proceed to the next programming step.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/AsLS9CNXc1g&amp;hl=sv_SE&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/AsLS9CNXc1g&amp;hl=sv_SE&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1140/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wind River Blog: Simics Analyzer</title>
		<link>http://jakob.engbloms.se/archives/1137?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1137#comments</comments>
		<pubDate>Wed, 26 May 2010 19:40:42 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[Wind River Blog]]></category>
		<category><![CDATA[embedded software]]></category>
		<category><![CDATA[multicore debug]]></category>
		<category><![CDATA[virtual platforms]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1137</guid>
		<description><![CDATA[I have a new blog post up at the Wind River blog network, about the new target analysis tools in Simics 4.4. It is a very fun piece of technology to play with, and you learn a lot just by poking around at existing software systems&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png"><img class="alignleft size-full wp-image-1122" style="margin: 5px 10px;" title="button-quicklink-blogs" src="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png" alt="" width="46" height="46" /></a>I have a <a href="http://blogs.windriver.com/engblom/2010/05/analyzed.html">new blog post </a>up at the Wind River blog network, about the new target analysis tools in Simics 4.4. It is a very fun piece of technology to play with, and you learn a lot just by poking around at existing software systems&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1137/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C in Danger &#8211; and thus Higher-Level Languages (?)</title>
		<link>http://jakob.engbloms.se/archives/1131?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1131#comments</comments>
		<pubDate>Sun, 09 May 2010 20:00:20 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Windows phone]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1131</guid>
		<description><![CDATA[Some recent developments among development environments for mobile phones have made me consider the hereto unthinkable: that C might be on a decline as the universal programming language. Indeed, maybe there is even a chance that we will not have a universal low-level language in the future at all. What is happening is that the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/05/C-dino.png"><img class="alignleft size-full wp-image-1132" title="C dino" src="http://jakob.engbloms.se/wp-content/uploads/2010/05/C-dino.png" alt="" width="105" height="94" /></a>Some recent developments among development environments for mobile phones have made me consider the hereto unthinkable: that C might be on a decline as the universal programming language. Indeed, maybe there is even a chance that we will not have a universal low-level language in the future at all. What is happening is that the hitherto &#8220;given&#8221; role of C as the base language for a platform is being questioned. The reason appears to be security, which cannot be said to be a bad thing. However, a large-scale move away from C might hurt many of today&#8217;s higher-level languages and even model-based engineering.<br />
<span id="more-1131"></span><br />
So what is going on? For the past decade or two, and even longer back than that on Unix platforms, it has been a truth that a (well-written) C program can be made to run on any platform. All platforms have had C compilers available (even Windows), and C programs with a dash of platform-dependent code in file operations could be easily made portable.  This has been used by common cross-platform application programs like Firefox, the Gimp, MySQL, and Wireshark, as well as by technical products like MatLab, the Diab and IAR C compilers (which I once worked on), and Simics (which I currently work on). It is a way of creating software that in my experience works very well. Especially since pretty much anything higher-level can be made to link with a basic C code base.</p>
<p>Ever since Unix became the role model for operating systems, C has been the &#8220;base&#8221; language. In desktop operating systems like Windows and Linux the platform API is expressed as C function calls, and the ABI (the binary calling conventions) for linking code from different compilation units and binary distribution units is also expressed in terms of the code that a C compiler would generate. A C compiler is the first thing you need to get the platform going, and C is a language that allows arbitrary applications to be developed and run on the platform. The semantics of dynamically loadable and shared objects are expressed in C, not C++, as the C++ ABI is too variable.</p>
<p>This ubiquitousness of C has also proven to  be a key enabler for higher-level languages. C is the language of choice to implement the basic virtual machines used by languages and programming systems like Perl, Python, Erlang, and Java. C (or C++) is also used as the target language of many modeling tools with code generation, such as MatLab/Simulink, Rational Rose, Rhapsody, and Labview. A single generator of C code can be reused to target many platforms. Sometimes C++ is the generated language (in particular for UML-based object-oriented tools), but C++ essentially falls back on the ubiquitousness of C to be able to call platform APIs and connect to other tools.</p>
<p>That is the state of things as we know them today. What seems to be happening is that this is slowly being deprecated&#8230; platforms are coming out where user code might not be possible to write in C at all, or where C programs cannot access the real platform API. For these platforms, it is quite difficult  port in an existing C/C++ portable program.</p>
<p>The first example is Google&#8217;s mobile phone operating system Android,where  Java was the only supported language at launch. Google have since made it possible to use C and C++ for some parts of an application, <a href="http://arstechnica.com/open-source/news/2009/06/android-goes-beyond-java-gains-native-cc-dev-kit.ars ">but it does not seem to be a full platform API allowing a whole program to be written only in C or C++: </a></p>
<blockquote><p>&#8220;The NDK will not benefit most applications. As a developer, you will need to balance its benefits against its drawbacks; notably, using native code does not result in an automatic performance increase, but does always increase application complexity,&#8221; the documentation says. &#8220;Typical good candidates for the NDK are self-contained, CPU-intensive operations that don&#8217;t allocate much memory, such as signal processing, physics simulation, and so on.&#8221;</p></blockquote>
<p>To port an application written in C/C++ such as Firefox to the Android platform, the app has to be modified to work as a backend to the Java interface.  <a href="http://arstechnica.com/open-source/reviews/2010/02/hands-on-and-under-the-hood-ars-tests-firefox-on-android.ars  ">ArsTechnica has a write-up on how Firefox was brought to Android through just such a modification</a>. Note that this does mean that ports are not as straight-forward as they would be to other platforms with a directly accesible C API. Interestingly, the Android approach essentially inverts the traditional relationship between C and other languages, where it was common to have a C adapter layer around other languages (like Java) in order to access the platform.</p>
<p>Note that the NDK quote does not mention language run-times. One of my favorite languages, Python, has had to be completely reimplented to run on Android. <a href="http://stackoverflow.com/questions/101754/is-there-any-way-to-run-python-on-android">Either using a &#8220;Jython&#8221; approach of compiling Python to Java byte codes, or using the Android Scripting Environment</a>.</p>
<p>Other languages that you would ordinarily just port using a simple recompile of the its C code base are not helped by this at all. One interesting example is the <a href="http://erlang.2086793.n4.nabble.com/Running-Erlang-on-Android-td2107544.html#a2107544">Erlang runtime</a>, which is basis for CouchDB. According to an interview on <a href="http://twit.tv/floss99">FLOSS weekly show 99, about Ubuntu One</a>, this fact prevents Ubuntu One from synching data from your desktop to your phone.  This demonstrates that the assumption that you can run a C program on &#8220;any Unix-like system&#8221; is no longer true for a large numbers of smartphones&#8230; and that is already affecting how you have to develop products.</p>
<p>Microsoft is also moving in the &#8220;no C for you&#8221; direction with Windows Mobile 7, where C# is the default language. This also prevents easy reuse of existing C programs on smartphones. <a href="http://arstechnica.com/microsoft/news/2010/03/winphones-first-big-native-code-casualty-firefox-on-winmob.ars">Ars Technica notes how this killed Firefox on Microsoft-based mobiles</a>.</p>
<p>Finally, we have Apples downright weird approach to languages and programming. Their recent banning of <a href="http://arstechnica.com/apple/news/2010/04/apple-takes-aim-at-adobe-or-android.ars">anything except Objective C and their own compilers </a>for iPhones (and iPods and iPads) is downright bizarre. They explicitly forbid code-generating tools to be used with their platform, as well as kicking out any alternative language runtimes (which is a move aimed at Adobe Flash that also hits Erlang, Python, et al.). This might make some sense from a security perspective, as it prevents programs from loading executable code at run-time on the phone&#8230; but it also makes for a much more restricted set of programming tools.</p>
<p>The only mobile platform that seems honest to old traditions is really Nokia&#8217;s Maemo. And Symbian. Suddenly, what used to be considered &#8220;closed&#8221; platforms have become the most open and most desktop-like of all the mobile operating systems. Really, that is a very important reason to get a Nokia N900 rather than an Android or Apple device.</p>
<p>I think this points to a somewhat more complicated future, where mobile applications will cannot be cross-platform, as you have to use Android-Java, Windows-C#, iPhone-ObjC, and Maemo-C/C++/anything to code. It could also point to a move even in the desktop and server space away from C and to more sandboxed, controlled, and not-as-common programming platforms. That would be really bad from a programmer productivity and language innovation perspective, as so much of the innovations today are actually based on the ubiquitousness of C and the use of C as a good implementation language and code-generation target language.</p>
<h3>Updates and clarifications</h3>
<p>Given the comments below, it seems that I need to make some things clearer&#8230;</p>
<p>First, the iPhone. It is really a special case, in that you do have C/objective-C access to the API. So in principle, you could port any C program including language virtual machines to the iPhone. Firefox, for example, would work. However, Apple for commercial (and maybe security) reasons does not allow programs that implement virtual machines to be distributed across their controlled application store. That you can implement a VM there does not really help you, as it is the first openly programmable platform that I have seen where a control body actually forbids certain classes of programs. The Apple approach is apparently even more idiotic than I first believed.  According to some more reports I read and heard, they do not enforce a technical limitation on the final program (such as running in a JVM or .net VM), but rather require all software to be originally and directly written in C, C#, or C++.  All just a swipe at Adobe and flash&#8230; so even Flash compiled to native code is disallowed.  And with it goes all other higher-level languages.</p>
<p>Second, on security. I do think that running programs on top of a VM like done with Java and .net does have security benefits. It gives you a level of indirection which can be used to check what applications does. Obviously not perfect since there will always be bugs and mistakes, but still it is a better architecture than raw access to the underlying machine. The  iPhone controlled mode of distribution could also be beneficial here. The <a href="http://www.twit.tv/sn245">SecurityNow podcast episode 245 </a>discusses this topic.</p>
<p>Third, on appropriate programming languages for different tasks. I totally agree with some comments that C is not a very nice language for GUI programming. No doubt about that. However, that was not really the point I was trying to make. I want to use higher level languages! But not having C available might make that harder and with limited choice&#8230; leading up to point four.</p>
<p>Fourth, my core point. <strong>Having platform-level access in C is a basic technology used today to implement the higher-level environments</strong>. Languages like Python, Perl, Erlang, Lua, and even the basic Java and .net virtual machines, all depend on having C available to bootstrap the process of getting the core virtual machine going. If we take this away, we limit choice in language and might stifle innovation, as well as the attractiveness of cross-platform environments.</p>
<p>Fifth, I agree with the comments C is definitely not going anywhere in terms of being used to develop operating systems and embedded systems (that&#8217;s where I spend most of my time, by the way). My observation is about what is happening to user-level programming for certain systems, not the systems programming which is intentionally made separate from user-level programming.</p>
<p><strong>Another Update:</strong></p>
<p>The Inquirer just pointed out that <a href="http://www.theregister.co.uk/2010/06/11/steve_jobs_lifts_interpreted_code_ban_for_chosen_few/">Apple is explicitly forbidding interpreters </a>to run on their phones, unless it is an interpreter they created or one explicitly allowed. That&#8217;s making the above very clear, Apple is consciously denying iPhone users all modern programming languages. And that&#8217;s just to make sure Adobe can&#8217;t weasel Flash in there. Politics sometimes make no sense at all. The Inq quote is worth quoting:</p>
<blockquote><p><em>Famously, when Apple released its iPhone SDK in spring of 2008, the  end user licensing agreement barred applications from downloading and  running any interpreted code. &#8220;No interpreted code may be downloaded or  used in an Application except for code that is interpreted and run by  Apple’s Documented APIs and built-in interpreter(s),&#8221; it said.</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1131/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Pipeline Performance Simulator Anno 1960</title>
		<link>http://jakob.engbloms.se/archives/1126?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1126#comments</comments>
		<pubDate>Mon, 03 May 2010 19:56:50 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[computer architecture]]></category>
		<category><![CDATA[computer simulation technology]]></category>
		<category><![CDATA[history of computing]]></category>
		<category><![CDATA[clock-cycle models]]></category>
		<category><![CDATA[cycle accuracy]]></category>
		<category><![CDATA[Frederick Brooks]]></category>
		<category><![CDATA[Harwood Kolsky]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[IBM 7030]]></category>
		<category><![CDATA[ISCA]]></category>
		<category><![CDATA[pipeline]]></category>
		<category><![CDATA[Tensilica]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1126</guid>
		<description><![CDATA[I have just found what almost has to be the first cycle-accurate computer simulator in history. According to the article &#8220;Stretch-ing is Great Exercise &#8212; It Gets You in Shape to Win&#8221; by Frederick Brooks (the man behind the Mythical Man-Month) in the January-March 2010 issue of IEEE Annals of the History of Computing, IBM [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/05/4506VV3073.jpg"><img class="alignleft size-full wp-image-1128" style="margin: 5px 10px;" title="IBM Stretch panel" src="http://jakob.engbloms.se/wp-content/uploads/2010/05/4506VV3073.jpg" alt="" width="83" height="79" /></a>I have just found what almost has to be the first cycle-accurate computer simulator in history. According to the article &#8220;<a href="http://dx.doi.org/10.1109/MAHC.2010.26">Stretch-ing is Great Exercise &#8212; It Gets You in Shape to Win</a>&#8221; by Frederick Brooks (the man behind <a href="http://en.wikipedia.org/wiki/Mythical_man_month">the Mythical Man-Month</a>) in the January-March 2010 issue of IEEE Annals of the History of Computing, IBM created a simulator of the pipeline for the <a href="http://en.wikipedia.org/wiki/IBM_Stretch">IBM 7030 &#8220;Stretch&#8221; computer </a>developed from 1956 to 1961 (<a href="http://www-03.ibm.com/ibm/history/exhibits/vintage/vintage_4506VV3073.html">photo from IBM.com</a>).</p>
<p><span id="more-1126"></span></p>
<p>For those unfamiliar with the Stretch machine, it was a supercomputer developed by IBM which introduced many of the performance techniques and basic computer technologies that we all use today (most of them handed down to us via the IBM System/360). For example, it was the first to use 8-bit bytes and 64-bit floating point. It also introduced memory protection, memory interleaving, and instruction prefetching.</p>
<p>More relevant for my blog is the fact that the Stretch used the world&#8217;s first pipelined main processor, complete with interlocks to maintain program-order semantics. When developing this pipeline, Frederick Brooks claims that IBM developed a program to simulate the pipeline. This simulator was used to test the performance of the pipeline design on various test programs (this was before they were called benchmarks), and tune the design accordingly. The simulator was created by <a href="http://archive.computerhistory.org/resources/text/FindingAids/102658131.Kolsky.pdf">Harwood Kolsky</a>. There is no firm date for the pipeline simulator, but based on the development time of the Stretch, it can be dated somewhere around 1960.</p>
<p>Thus, the simulation-driven approach to computer architecture is about 50 years old by now. Should have gone to ISCA and used this as an excuse for a party I guess&#8230;</p>
<p>It is also interesting to note that the Stretch computer acquired a co-processor in 1962, to do cryptology work. This machine was the one-off <a href="http://en.wikipedia.org/wiki/IBM_7950">IBM 7950 &#8220;Harvest&#8221; </a>and was tailored for the needs of the NSA in the US. It was a seriously special-purpose hardware unit adding a few instructions to the Stretch machine, and beating any other machine at the time by about 50 to 200 on the particular NSA workloads.  Sounds like the kind of performance claims that Tensilica and other application-customized processors claim. 50 years ago.</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1126/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Blog at Wind River!</title>
		<link>http://jakob.engbloms.se/archives/1121?&amp;owa_from=feed&amp;owa_sid=</link>
		<comments>http://jakob.engbloms.se/archives/1121#comments</comments>
		<pubDate>Thu, 29 Apr 2010 19:14:03 +0000</pubDate>
		<dc:creator>Jakob</dc:creator>
				<category><![CDATA[Wind River Blog]]></category>
		<category><![CDATA[articles]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[computer simulation technology]]></category>
		<category><![CDATA[virtual platforms]]></category>
		<category><![CDATA[Simics]]></category>

		<guid isPermaLink="false">http://jakob.engbloms.se/?p=1121</guid>
		<description><![CDATA[One of the many nice effects of the Wind River acquisition of Simics is that I will be blogging as part of the Wind River Blog network. My first post there is up now, and it is a short (at least compared to a textbook, I admit it looks terribly long for a blog post) [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png"><img class="alignleft size-full wp-image-1122" style="margin: 5px 10px;" title="button-quicklink-blogs" src="http://jakob.engbloms.se/wp-content/uploads/2010/04/button-quicklink-blogs.png" alt="" width="46" height="46" /></a>One of the many nice effects of the Wind River acquisition of Simics is that I will be blogging as part of the Wind River Blog network. <a href="http://blogs.windriver.com/engblom/2010/04/what_is_simics_really.html">My first post there is up now</a>, and it is a short (at least compared to a textbook, I admit it looks terribly long for a blog post) overview of how Simics works inside.</p>
<p>I think it is important for users of technologically advanced tools to know a bit of how they work. A classic example of this is compilers, where I taught an ESC class almost a decade ago which is my most <a href="http://jakob.engbloms.se/archives/750">popular piece of writing to date</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jakob.engbloms.se/archives/1121/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
