<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-344963309256765282</id><updated>2012-02-12T22:56:51.273-08:00</updated><title type='text'>Science and more</title><subtitle type='html'>Science is everything.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-4931253385653230611</id><published>2012-02-12T22:35:00.000-08:00</published><updated>2012-02-12T22:56:51.366-08:00</updated><title type='text'>Plasma Active Two and Pandaboard</title><content type='html'>I saw this &lt;a href="https://lists.ubuntu.com/archives/kubuntu-devel/2012-February/005782.html"&gt;argurably-bad news&lt;/a&gt; a couple of days ago and tried to reach kubuntu team for further information about Kubuntu and, esp. Plasma Active on Kubuntu (a.k.a Kubuntu Active). I was ever trying to create PA PPA by myself since &lt;a href="https://launchpad.net/%7Ekubuntu-active/+archive/ppa"&gt;Kubuntu Active PPA&lt;/a&gt; isn't active for a well. But I don't have permission to update this PPA and nor does launchpad.net support ARM PPA, I decided to try out PA2 on Pandaboard following old build-from-source way while I am waiting for this PPA to be updated.&lt;br /&gt;&lt;br /&gt;However, KDE and Kubuntu code has changed quite a few and I don't have to build everything from source, instead, I can just assume all KDE SC 4.8.0 pkgs in Kubuntu preecise (12.04) are all good enough to run PA2, then only followings are necessary to build:&lt;br /&gt;- share-like-connect- contour&lt;br /&gt;- plasma-active&lt;br /&gt;- startactive&lt;br /&gt;&lt;br /&gt;This time I didn't start from Linaro images because it hasn't moved to Precise yet, but I most likely will lose Open GL ES acceleration for X. Furthermore, I started from armhf image which &lt;a href="http://www.phoronix.com/scan.php?page=article&amp;amp;item=ubuntu_1204_omap4460&amp;amp;num=1"&gt;seems to be very promising performance wise&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) Prepare image&lt;/b&gt;&lt;br /&gt;- Download precise-preinstalled-desktop-armhf+omap4.img.gz from http://cdimage.ubuntu.com/kubuntu/daily-preinstalled/current/&lt;br /&gt;- Plug in SD card (assume at /dev/mmcblk0p0 from dmesg)&lt;br /&gt;- Run&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo sh -c 'zcat ./precise-preinstalled-desktop-armhf+omap4.img.gz |dd bs=4M of=/dev/mmcblk0p0 ; sync'&lt;/span&gt;&lt;br /&gt;- Plug into Pandaboard and boot. A standard KDE desktop will be shown&lt;br /&gt;&lt;br /&gt;Note:&lt;br /&gt;- I actually did a little trick to have all rootfs in a USB drive and modified boot.scr to use that. But due to slower USB drive I have, it is slower than SD card :-(&lt;br /&gt;- This Precise image has a big problem: no OEM setup procedure for first run, which left a unaccessible system stuck at KDM. I had to mount the rootfs at PC and chroot into it to setup a new user.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2) Get the source&lt;/b&gt;&lt;br /&gt;Refer to http://ezjd.blogspot.com/2011/10/building-plasma-active.html for share-like, share-like-connect and plasma-active code. Note that Active/Two branch should be used.&lt;br /&gt;&lt;br /&gt;For startactive:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd ~/kde/src&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;git clone git clone git://anongit.kde.org/startactive&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;git checkout Active/Two&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;3) Install build dependencies&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;sudo apt-get install debhelper cmake pkg-kde-tools kdelibs5-dev libkactivities-dev shared-desktop-ontologies kde-runtime kde-runtime-data kde-workspace-dev qtmobility-dev shared-desktop-ontologies kdelibs5-experimental-dev libqt4-opengl-dev libqtwebkit-dev kde-workspace-dev libxrender-dev&lt;br /&gt;&lt;br /&gt;Note: qtmobility pkg is in universe repo which is not enabled by default&lt;br /&gt;&lt;br /&gt;FindQtMobility.cmake is missing in installation and I used one provided by Seba from KDE team.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;4) Build&lt;/b&gt;&lt;br /&gt;Do the followings for all 4 modules: &lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mkdir ~/build&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd build&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mkdir &lt;module name=""&gt;&lt;/module&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd &lt;module name=""&gt;&lt;/module&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cmake ~/kdesrc/&lt;module name=""&gt; -DCMAKE_INSTALL_PREFIX=/usr&lt;/module&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;make&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo make install&lt;/div&gt;&lt;br /&gt;Note: the default install prefix is /usr/local, which is inconsistent with default KDE installation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5) Run&lt;/b&gt;&lt;br /&gt;This time I managed to have a less hacky way to start PA thanks to startactive.&lt;br /&gt;&lt;br /&gt;- In /usr/share/xsessions, add a new one plasma-active.desktop with:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[Desktop Entry]&lt;br /&gt;Encoding=UTF-8&lt;br /&gt;Type=XSession&lt;br /&gt;Exec=/usr/bin/startactive&lt;br /&gt;TryExec=/usr/bin/startactive&lt;br /&gt;Name=KDE Plasma Active Contour Workspace&lt;br /&gt;Comment=The mobile desktop made by KDE&lt;/div&gt;&lt;br /&gt;- Don't forget to move /usr/share/autostart/plasma-desktop.desktop to somewhere else for backup&lt;br /&gt;&lt;br /&gt;- &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ln -s /usr/bin/kwin /usr/bin/kwin_gles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- Create an empty setup-contour-intro.sh in /usr/bin&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#!/bin/bash&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;echo "Fake contour intro"&lt;/div&gt;&lt;br /&gt;- When next time booting, select "KDE Plasma Active Contour Workspace" session in KDM.&lt;br /&gt;&lt;br /&gt;See, running PA2 is much easier on Precise but I still have following Problems to solve:&lt;br /&gt;* No mouse cursor&lt;br /&gt;&amp;nbsp; &amp;nbsp; Right now, I have to do workaround:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Alt-F2 start krunner and konsole&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - sudo systemsettings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - use keyboard to select different mouse cursor theme in "Workspace Apperance" -&amp;gt; "Cursor Theme" than plasma active one.&lt;br /&gt;* Enable touchsreen (well, do nothing to KDE :-))&lt;br /&gt;* Missing status icons in panel.&lt;br /&gt;* startkde doesn't live well with startactive &lt;br /&gt;* Open GL ES, of course.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-4931253385653230611?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/4931253385653230611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2012/02/plasma-active-two-and-pandaboard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/4931253385653230611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/4931253385653230611'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2012/02/plasma-active-two-and-pandaboard.html' title='Plasma Active Two and Pandaboard'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-3936488415601337799</id><published>2012-01-09T22:59:00.001-08:00</published><updated>2012-01-29T14:43:45.084-08:00</updated><title type='text'>DEB vs RPM : the distribution for mobile device</title><content type='html'>Before talking about what distro fits in Mobile or Embedded world, let us revisit the idea: what is embedded device and what is mobile device.&lt;br /&gt;&lt;br /&gt;Embedded system was referring to a sub-system physically embedded into another system, nowadays, an embedded device generally means a computer system with very limited resource like RAM, ROM/Flash, power, esp. with a much less powerful CPU than, for example X86. However, it is actually a very subjective thing, for example, some may refer to an micro controller with &amp;lt;10MHz CPU and &amp;lt;1MB RAM, while others are talking about a mobile device with 500MHz CPU with 32MB RAM, even for the same person, the definition changes over time. In general, a typical embedded system is much powerful than one 5 years ago and could be as powerful as a desktop system 10 years ago.&lt;br /&gt;&lt;br /&gt;Mobile device refers to a device can be easily carried, normally on battery, but generally laptop is an exception. It was almost the same thing as embedded system 10 years ago because technically they are the same powerful. With that quad-core tablet is coming to market, it is actually as powerful as a PC now. Cell phone as a typical mobile device, was just 200MHz ARM9 + 8MB RAM when I was developing a 3G model a decade ago, but nowadays a cell phone with 1GHz Cortex-A9 + 512MB RAM can barely be a high end smart phone.&lt;br /&gt;&lt;br /&gt;Putting the history aside, what is typical spec of an embedded device or mobile device now? It is quite reasonable to assume an embedded device has &amp;gt; 300MHz ARM9 + &amp;gt;16 MB RAM and flash, and a mobile device has &amp;gt;700MHz ARM11(+VFP) + &amp;gt;128MB RAM and flash (&lt;a href="http://www.raspberrypi.org/"&gt;Raspberry Pi&lt;/a&gt; at $25, for example), while considering a fancy UI, it isn't difficult and expensive to have a mobile device with 1.5GHz Cortex-A8 (VFP+NEON) + 1GB RAM and flash (&lt;a href="http://rhombus-tech.net/"&gt;Allwinner A10&lt;/a&gt;, CPU board at &lt;a href="http://rhombus-tech.net/allwinner_a10/orders/"&gt;$75&lt;/a&gt; and most likely will reach $15 soon). (Actually a dual core Cortex-A9 1GHz + 1GB DDR2 + 8GB eMMC tablet at &amp;lt; $250 can be &lt;a href="http://www.engadget.com/2012/01/05/efun-nextbook-elite-10/"&gt;expected&lt;/a&gt; in 2012) &lt;br /&gt;&lt;br /&gt;Go back to the topic at the beginning, the question becomes "do we really need a heavily tailored Linux distribution for embedded device and mobile device?", and I would say, yes and no. For low end embedded device like micro controller, any popular Linux distro is too big, however, I doubt such distro will even be considered because this kind of device are for very specific and simple task simply not worth to make general-purpose Linux distro on it, instead a RTOS is our good old friend. At the same time, taking example of an typical mobile device, any slightly modified distro will work well, and for high end ones, no modification is really needed. &lt;br /&gt;&lt;br /&gt;Here are some data:&lt;br /&gt;Stock ICS (Android 4.0) running on Pandaboard, tablet mode, home screen, res. 640X480&lt;br /&gt;Flash: 75MB RAM:210MB&lt;br /&gt;&lt;br /&gt;Kubuntu 11.10 running on Pandaboard, home screen, res. 640X400&lt;br /&gt;Flash: 2.7GB RAM:295MB&lt;br /&gt;-- Linaro nano: ~100MB flash&lt;br /&gt;-- Linaro alip (X+xfce): ~900MB flash&lt;br /&gt;-- Ubuntu + KDE minimal: ~1.6GB&lt;br /&gt;&lt;br /&gt;There are other consideration about speed on mobile device too, which might lead to customised pkgs. However, given the powerful CPU we can have now, this doesn't seem to be the place we have to put a lot of effort either. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some embedded distributions tend to use RPM instead of DEB partially because the maintainers want the freedom to strip down stuffs "too much" for embedded/mobile system, which has been the tradition in embedded world, even though DEB based distro can be customized and totally independent to Debian. Given the fact that customization is minimized or not necessary, the well-built and thoroughly tested Debian packages for different architectures show the unmatchable strength on simplifying the development and shortening the time to market.&lt;br /&gt;&lt;br /&gt;Debian as a general purpose distribution provides more open source packages than any other distributions, but its policy prevents proprietary software from inclusion directly. This is a big obstacle in mobile world because most of GPU drivers are closed. However, derived distro like Ubuntu and Linux Mint always accept proprietary packages for real world usage and can be an easy work-for-me approach.&lt;br /&gt;&lt;br /&gt;One last thing to mention is that DEB package database has a lot of text files which was viewed as performance overhead for running in embedded system due to relatively slow storage. But I haven't seen any delay with DEB than RPM on eMMC based system, instead, to me, DEB always performs faster on desktop, laptop and embedded/mobile devices. Some developers also mentioned that binary RPM database is &lt;a href="http://unix.stackexchange.com/questions/634/what-are-the-pros-cons-of-deb-vs-rpm"&gt;hard to repair&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;BTW, noticed today that Tizen released the first batch of code and SDK in developer.tizen.org, which is just SLP from Samsung (and DEB based !), thus,&amp;nbsp; MeeGo is just gone completely.&lt;br /&gt;&lt;br /&gt;[Update Jan 29, 2012] Update and add reference to HW spec and minor changes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-3936488415601337799?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/3936488415601337799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2012/01/deb-vs-rpm-distribution-for-mobile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/3936488415601337799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/3936488415601337799'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2012/01/deb-vs-rpm-distribution-for-mobile.html' title='DEB vs RPM : the distribution for mobile device'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-5220674110495369142</id><published>2012-01-02T20:15:00.000-08:00</published><updated>2012-01-10T09:37:44.261-08:00</updated><title type='text'>2011: Linux Mint the winner? Debian wins!</title><content type='html'>In the second day of 2012, I checked&amp;nbsp;&lt;a href="http://www.distrowatch.com/"&gt;distrowatch&lt;/a&gt; as usual and noticed &lt;a href="http://distrowatch.com/weekly.php?issue=20120102#stats"&gt;another official opinion&lt;/a&gt; about the famous "Linux Mint takes over Ubuntu" since this came from distrowatch's statics. It has been a few weeks since Mint climbed to the No. 1 in distrowatch's list based on H.P.D. (hit per day) and Mint fans has been celebrating while others expressed different ideas. Basically the truth is that H.P.D. can't reflect neither the popularity nor the installation base. However, it is worth to look into. Therefore, I killed a couple of hours of my New Year holiday to dig something out of it.&lt;br /&gt;&lt;br /&gt;I started from the historic data from distrawatch since 2002, the first time I started checking distrowatch regularly and it happened to be oldest data available from the web site. After downloading the average H.P.D. for the top 30 distros in the list of each year, I put them into spreadsheet (btw, using Kspread) then converted the H.P.D. of each distro into percentage of all the H.P.D. of that year. Given that the nature of Ubuntu or Debian derived distros are very close, I categorised the data of each years to the following 4:&lt;br /&gt;-- Linux Mint&lt;br /&gt;-- Ubuntu&lt;br /&gt;-- xUbuntu (kubuntu, xbuntu and lubuntu)&lt;br /&gt;-- Other Debian/Ubuntu based distros&lt;br /&gt;&lt;br /&gt;I carefully selected these 4 because they are exclusive and very interesting to draw into line graph. After that, I met a problem with my Kspread and it can't launch kchart. Fortunately the data is not too much so that I manually imported them into a Google spreadsheet and drew the graph as following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsQAAAFmCAYAAABqaYz7AAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7snQd8lGW2xp+0SQ9JCIEQepMSqmID1rWAi2UtKDZQEJRVunq94nXta1nXwlpRFJHVXVx17YooirBYEOlFeg2hptdJuee8kxlSSTKZZNpz9vfdmfm+93vL/xu5T86c95yAMjHQSIAESIAESIAESIAESMBPCQT66bq5bBIgARIgARIgARIgARIwBCiI+UUgARIgARIgARIgARLwawIUxH79+Ll4EiABEiABEiABEiABCmJ+B0iABEiABEiABEiABPyaAAWxXz9+Lp4ESIAESIAESIAESICCmN8BEiABEiABEiABEiABvyZAQezXj5+LJwESIAESIAESIAESoCDmd4AESIAESIAESIAESMCvCVAQ+/Xj5+JJgARIgARIgARIgAQoiPkdIAESIAESIAESIAES8GsCFMR+/fi5eBIgARIgARIgARIgAQpifgdIgARIgARIgARIgAT8mgAFsV8/fi6eBEiABEiABEiABEiAgpjfARIgARIgARIgARIgAb8mQEHs14+fiycBEiABEiABEiABEqAg5neABEiABEiABEiABEjArwkEu2r19957L1auXFmpu8DAQCxatMhx7osvvsCCBQvM53HjxmHEiBEnHb6u9ie7vmbNGjz55JMoKyuDzq1fv35mrEOHDmHGjBl4/fXXERERcdLxeZEESIAESIAESIAESMD3CbhMEOfm5hqR2aFDhxqprV+/Hh9//DGefvppBAcH48EHH0RycjL69OnjVPu6+ps7dy6mTJmCoKAgvPbaa3j++efNOPPmzcPo0aMphmukzpMkQAIkQAIkQAIk4H8EXBYykZeXd1KRuXDhQowdOxZJSUlo1aoVrr/+erz77ru1Eq+rfV3X9+7di8GDB2PQoEHYs2ePGWf79u3YvHkzLr300lrH5QUSIAESIAESIAESIAH/IuAyQawe4pOFIKhA7dmzp4Nujx49HEK1JuR1ta/rur1PDZkICAgwH9VrrKEa6qGmkQAJkAAJkAAJkAAJkIAScJkyVA/xRx99hGXLlqG4uNiEJVxwwQUOyunp6YiKinJ8jomJwfHjx2t9CnW1r+t6586dTUxzSUkJOnXqhFWrViErKws67rXXXmvGveeeezBgwIBa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w6NHj8b777/fvCza9tHWV1dX63Yef/xxFBUV6XpXrlyp07A5nU784Q9/aDUPsjVE2AoJkAAJkAAJkAAJkEBXE7DUEHe1WLZPAiRAAiRAAiRAAiRAApEELBsyEdkwP5MACZAACZAACZAACZBAIhCgIU6EXmAMJEACJEACJEACJEACXUaAhrjL0LNhEiABEiABEiABEiCBRCBAQ5wIvcAYSIAESIAESIAESIAEuowADXGXoWfDJEACJEACJEACJEACiUCAhlh6YfPmzbjxxhsxbNgw/br55puxe/fuI/pn9uzZOP300/Xr73//+w/6rq317an/BxXGYUF72m0rbhVCW+s3btyI6667DieddJJ+TZkyBVu2bIlD5G1XYbau8NZffvllHHvssW0HFKe1ZutS/aO0hL/69esXp+jbrsZsbar1hQsX4pJLLtF5x6+66ir9/9rsYrauyP4KfU52XTt27MAvfvELnHzyyfp10003Ydu2bWbL0vWb3WeqjTfffBNjx47F7bffjn371NTc5pd46FJRvvXWW+jbt2+LAbd1PmhxhzgttEJbW7rjJIPVJDoBlYc41cull15qvPDCC4ZMJ2189913xn333Wdcf/31zVg+/fRT46KLLjLE7BnyRW6o7ZcvX97u9dHqN4t/tHY7q+vyyy83nnzySUMmWzFkSmzj7rvvNtQys4vZukLxHzp0yJCTmiGzIpotSddvtq4rrrjC+OabbyzREtmI2drWrFljyI8yQ6ZpNyoqKgzJNW5cdtllkWHE/bPZuiIDfu655wzJrR65OO6fzdZ15ZVXGtOnT9ffueql3qtlVhSztb3yyivGb37zG30cbtq0yZg0aZIh+e9Nl9ZZXSrARYsWGXfddVeL33nRzhdmCjRbW1u6zdTFuhOLABIrnMSIRn1Bn3DCCc3BKHMsE4Y0f3733XeNqVOntnt9pKrI+iPXm/U5st1461IngOOPP96s8Fut1yxdjz76qPHEE0+0eHJoNZg4roi3rvPOO0//eEmEEm9t6iSuTFWoNDY2GgcOHLBcarx1hQtQP9B+/OMfd8mPmnjrGjRokCETJzXLq6mpMdSyrijx1jZq1ChthkPl448/NuRquOXSYtWlAlT/h5qamlr8zot2vrBSYLy1taXbSl1sq2sJcMhEC5fwy8rKUFpa2rxmw4YNOPHEE5s/DxkyBGpZqERbH9lEZP2R6836HNlutLijrQ+PMxAI6Fttp556qlnht1qvGbrUFONz587VQ0K6qsRbV1VVFfx+f1fJOaLdeGv77LPPoGa6DBU1E2VOTo7lWuOtK1zAq6++CjHErd7ONlNsvHWdffbZePrppyE/WiB35SB36HDOOeeYKaHVuuOtTU7pR7SljkO5g9Fq+2atiFWXiuPWW2/VM8m2VGI5H7S0fzyXxVtbW7rjGTfrSmwCNMQR/VNfX48HHngAt9xyS/OavXv3Ijs7u/lzbm4uysvL270+vImW6rfiEGmp3Xjq6t+/P2bOnIn777/fCjnNbZil65FHHoHc6uwyA2mGLmWIX3zxRT3O9oILLsA//vEPS/sq1JgZ2vbs2QM1pv3iiy/GWWedBbltbbk2M3SFi3jppZcgV+lsoevhhx/Ghx9+qMcPq+c23nnnHcgwF1tokyEtmDZtGvbv36+fRXnqqaegvmutLB05FqPFF+18EW3/eK03Q1u8YmM9yU2Ahjis/+Q2DCZPnowxY8ZAxiy12rORVwAiN2xtfXvrj6yvs5/b225rcYfab2v92rVrIWM29YnAqmKWLnU1Z/HixZg4caJVUo5oxyxd6oHQHj166Acln332WcgwIMyZM8dSjWZpk1vu2mDJGFu89tprkPGOeP311y3TZpaukIBVq1bB6/XqBwatLGbpeuyxx/QVYXVlX71kOA8eeughK6XBLG3jx4/H0KFDIc+dYMKECfoHms/ns0xbvHRFC7it80G0fTu63iptHY2P+yU3ARriw/23c+dOjBs3Tn9JR94mLyws1Lf1QkXd5ispKWn+HG292rCt+s08hNpqN1rc0daHx52WlqavXilTYkUxU5cy9eoOgTIgVhczdckDkLjwwgv1yfmoo47Sd0JmzJhhmUQztRUUFOj/t8XFxcjLy4OMKYbSa0UxU1co/o8++kgbKyuLmbrU3Ql1B0b1lXpde+21ePvtty2TZ6Y2JUIZYRk7jA8++AAqk4s6Lq0ondEVLb5YzgfR6urIejO1dSQe7mM/AjTE0qfq1pa6Gqi+xNTtrsgyYMAAyFPCzYslwwTUslCJtj5a/ZHtxetztHajxR1tfWVl5RGh1tbWWmIizdb1ySef4J577mlOT6ZEqnRXI0eOjFfXtFiP2breeOMNqNuNoaLeZ2ZmthhLvBearU0e5oQaNhEqaky7FeOlzdYV0rNkyRKcdtpp8e6WVuszW5c8uAX1CpW6urpWY4n3CrO1qWES8lBnc9jz58/XQ0PMLp3VFS2+aOeDaPt3Zr3Z2joTG/e1EYGufaYvMVq/8847jXvvvbfVYFasWKHTrslAfp167fzzzzfkFmbz9tHWR6u/1YY7uSJau9HijrZepSSTW++GGGNDPQGv3qt0Q2YXs3VFxm9V2jWzdckV1OZUVyrbhOTbNsQkR8o15bPZ2uRHjCFjo41vv/1WP+GvjsP33nvPFC3hlZqtK9SWXB3W3z9WFbN1SX5enbJRpbkUs6NTff3617+2RJ7Z2lSKMBkjrXXJFWJDHsI2ZEiZ6do6qys8wJa+86KdD8wUaLa2UOwt6TZTF+tOLAJMuyb9IUnIdZqZyJc6uYaKZBwwZAymccYZZxiSdP0HvdjW+vbU/4MK47CgPe22FbcKoa31KqetjLk2ZLycIQ/GGHfccccR6YbiIKHFKszWFdmoVV+SZuuSK1c6XaBkTNH5lWWCmUippn02W5sKfN68efqHqzKP8gCaaVrCK7ZCl2pPpSRTPzqtKmbrUj9a1PeFXDnVL/VeGUgritna1q9fr3NgqxSUMkTJkGFkVsiKy3ks8hwY+d3X1vnATJHx6LO2tLW1zkxdrDuxCDhUODa64E0pJEACJEACJEACJEACJBATAY4hjgkXNyYBEiABEiABEiABErAbARpiu/Uo9ZAACZAACZAACZAACcREgIY4JlzcmARIgARIgARIgARIwG4EaIjt1qPUQwIkQAIkQAIkQAIkEBMBGuKYcHFjEiABEiABEiABEiABuxGgIbZbj1IPCZAACZAACZAACZBATARoiGPCxY1JgARIgARIgARIgATsRoCG2G49Sj0kQAIkQAIkQAIkQAIxEaAhjgkXNyYBEiABEiABEiABErAbARpiu/Uo9ZAACZAACZAACZAACcREgIY4JlzcmARIgARIgARIgARIwG4EaIjt1qPUQwIkQAIkQAIkQAIkEBMBGuKYcHFjEiABEiABEiABEiABuxGgIbZbj1IPCZAACZAACZAACZBATARoiGPCxY1JgARIgARIgARIgATsRoCG2G49Sj0kQAIkQAIkQAIkQAIxEaAhjgkXNyYBEiABEiABEiABErAbARpiu/Uo9ZAACZAACZAACZAACcREgIY4JlzcmARIgARIgARIgARIwG4EaIjt1qPUQwIkQAIkQAIkQAIkEBMBGuKYcHFjEiABEiABEiABEiABuxGgIbZbj1IPCZAACZAACZAACZBATARoiGPCxY1JgARIgARIgARIgATsRoCG2G49Sj0kQAIkQAIkQAIkQAIxEaAhjgkXNyYBEiABEiABEiABErAbARpiu/Uo9ZAACZAACZAACZAACcREgIY4JlzcmARIgARIgARIgARIwG4EaIjt1qPUQwIkQAIkQAIkQAIkEBOB/wfts5qWmQ4b5AAAAABJRU5ErkJggg==" /&gt;&lt;br /&gt;-- As I said before, it is not about distro market share but where people's interest goes, while in turn, it may affect the market share to a noticeable extent.&lt;br /&gt;-- It is worth to note that the total H.P.D. in 2002 and 2003 was quite low at ~4000 and ~6000. And the data started increasing at ~12000 in 2004 and ~20000 after 2007.&lt;br /&gt;-- Debian derived distros (including Ubuntu and variants) now take majority of public interest at ~40% since 2007. I did briefly looked at other home-grown distro and variants like Fedora, OpenSUSE, Gentoo, etc.&amp;nbsp; but they are at 10% level, thus, I didn't spend more time.&lt;br /&gt;-- Even though Ubuntu is losing interest probably because of Unity, all official Ubuntu variants still attracted similar hits since 2007. I personally don't care about Unity since I am a Qt/ KDE guy even after learned that Unity 2D demonstrated how Qt benefits the UI development.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Since this is just beginning of 2012, I'd like to share something I had in mind:&lt;br /&gt;-- Even though Android replaces most of existing GNU(and other open source) user space components and seems to be successful, I still hope tradition Linux disto can get a breakthrough soon simply because I believe in open source and "not reinvent the wheels". Also I bet on Debian or one of its derived distro.&lt;br /&gt;-- Debian is the only distro supporting quite a few architectures including the present and future of mobile device -- ARM while other important distos like Fedora and OpenSUSE just started the official ARM porting. BTW, 2012 is the key year for Intel to show its capability and possibility of success in mobile world, which we haven't seen a sign.&lt;br /&gt;-- Debian is working on 2 key things: &lt;a href="http://wiki.debian.org/Multiarch"&gt;multiarch&lt;/a&gt; and &lt;a href="http://wiki.debian.org/Multiarch"&gt;armhf&lt;/a&gt;. The former will give all the architecture the equal position in distro and ease the cross architecture development and the latter will be the default compiling configuration for new ARM chip in the future. Multiarch is really ambitious and may need years of community effort but this is the advantage of open source and the benefit is already seen in latest Ubuntu. armhf porting is joint effort of Debian community, Canonical and Linaro, and it is a quite different cooperation and vertically in ARM ecosystem.&lt;br /&gt;-- Right now, Debian is still yet to be proved that it can succeed in business/commercial world as well as UI system. Companies needs the assurance behind a distro, i,e., sufficient support from a reliable company and Redhat, the billion-dollar-revenue open source company proves that it is not only possible but very much profitable. But Redhat failed at desktop/UI system side. Canonical targets to fill both the gaps with Debian derived Ubuntu. However, Unity isn't there and I suspect it won't either. This year will be a very tough year for Ubuntu and Canonical. But whether Unity fails or not, I don't think Debian or Ubuntu will fail the world.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Best wished to Debian in 2012!&lt;br /&gt;&lt;br /&gt;Update: Find this article &lt;a href="http://w3techs.com/blog/entry/debian_is_now_the_most_popular_linux_distribution_on_web_servers"&gt;Debian is now the most popular Linux distribution on web servers&lt;/a&gt; and following graph&lt;br /&gt;&lt;img alt="" src="data:image/png;base64,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EiABEviWAKaadI78jlL4NcnFn9gtwLsdfB+iSY2E2WoCNLzZEEiABEiABEiABOomUJR3O/jJ3bqbAjMIEKDhHYDDIBIgARIgARIggYFFYMC/DzGumROfBlZb8mlbhE85+/SiHwmQAAmQAAmQAAmQAAnkigAN71xVB4UhARIgARIgARIgARIoKgEa3kWtWepFAiRAAiRAAiRAAiSQKwI0vHNVHRSGBEiABEiABEiABEigqARoeBe1ZqkXCZAACZAACZAACZBArgjQ8M5VdVAYEiABEiABEiABEiCBohKg4V3UmqVeJEACJEACJEACJEACuSJAwztX1UFhSIAESIAESIAESIAEikqAhndRa5Z6kQAJkAAJkAAJkAAJ5IpA1Yb37Nmz1S677KJWXHFFtdtuu6kvv/wyVwpRGBIgARIgARIgARIgARLII4GqDe/Jkyer8ePHq//9739q3XXXVSeddFIe9aJMJEACJEACJEACJEACJJArAp3VSjNlyhT19NNPq+9+97vq6KOPVjvttFO1WTA+CZAACZAACZAACZAACQw4AlX3eM+cOVOtvPLKGtQqq6yicExHAiRAAiRAAiRAAiRAAiQQJlB1jzeyGzQobK93dHR4S1153BCvfzt6PvXUU6od9WlXuZPaSBH0KYIOdv0URZ+i6IG6KZIuRdKnSPVSFF2Kooe5JhdNnyRboJ38qza8V1hhBfXZZ5+p1VZbTW9x7LooilyvQh63q57tKndSIyqCPkXQwa6fouhTFD1QN0XSpUj6FKleiqJLUfQw1+Si6ZNkC7SLf7jr2qPFhAkT1NVXX63mzJmjrr32WrXddtt5YtGLBEiABEiABEiABEiABEjAJtAhT0JVdU9//vnn6uCDD1avv/662nTTTdVdd92lPy1IRwIkQAIkQAIkQAIkQAIkkEygasM7OSuGkAAJkAAJkAAJkAAJkAAJJBFInWry0UcfqTXWWCMpfYV/0kuVaYntdEnlJfmn5Z01PC1/yOj+QnnXyiKUpy8sTe7vf//76qabbqpIimP459Gl6WNkvu+++3R9YJsXlyZ7u9WF4Zqml82/Ve2+njpvpD79oW9W+fN4jvjqLU2fadOmqUmTJqnllltOLb/88noBN/jl0aXpAplRLxtuuKFadtll9ajxAw88kKrKnnvumRqnkRHS9EC7v/POOyuK7I9zIU3nLHqY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" /&gt;&lt;br /&gt;&lt;br /&gt;Clearly Debian + Ubuntu takes close to 50% of linux server market share in 2011 and more than CentOS + Redhat's share.&lt;br /&gt;&lt;span id="goog_1527133488"&gt;&lt;/span&gt;&lt;span id="goog_1527133489"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-5220674110495369142?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/5220674110495369142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2012/01/2011-linux-mint-winner-debian-wins.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/5220674110495369142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/5220674110495369142'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2012/01/2011-linux-mint-winner-debian-wins.html' title='2011: Linux Mint the winner? Debian wins!'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-8513120339056822194</id><published>2011-12-15T22:11:00.000-08:00</published><updated>2012-01-29T15:03:53.343-08:00</updated><title type='text'>DEB vs RPM : building pkg</title><content type='html'>Package building system is much more important to developer than normal user but it actually is the major reason for one to chose RPM over DEB or the other way around.&lt;br /&gt;&lt;br /&gt;The key to build RPM package is &lt;i&gt;&lt;b&gt;.spec&lt;/b&gt;&lt;/i&gt; file. Developer basically are free to do whatever he/she wants in &lt;i&gt;&lt;b&gt;.spec&lt;/b&gt;&lt;/i&gt; file for package building tasks such as configure/make/install/etc. even though some checking with pkg's original&amp;nbsp; makefile or build system are in place, like whether "make install" installs same set of files as&lt;i&gt;&lt;b&gt; .spec&lt;/b&gt;&lt;/i&gt; install rule. This adds a kind of redundancy because, for example, developer has to add make/install rules in spec file, even if it is just a couple of lines because original pkg's makefile already handles it pretty well. Another down side is macro usages in spec file. Using macro improves the efficiency of packaging but the complete list and document of macros available to a specific RPM based distro are often missing, therefore, it takes some time for new developer to create &lt;b&gt;&lt;i&gt;.spec&lt;/i&gt;&lt;/b&gt; file efficiently.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;rpmbuild&lt;/b&gt;&lt;/i&gt; is the tool to generate binary and source RPM using spec file. Note that it doesn't automatically install build dependencies of a package. &lt;br /&gt;&lt;br /&gt;Instead of a single &lt;i&gt;&lt;b&gt;.spec &lt;/b&gt;&lt;/i&gt;file, DEB uses a set of files to accomplish packaging, which stays in &lt;i&gt;&lt;b&gt;debian&lt;/b&gt;&lt;/i&gt; dir. &lt;b&gt;&lt;i&gt;dh_make&lt;/i&gt;&lt;/b&gt; is the tool to generate default files (a.k.a templates) for DEB packaging. For reuse and share purpose, most common way to build a package is to use dh_xxx scripts for general tasks like untar, patch, configure, make and install. Moreover, most of time it is not really necessary to add explicit calls to these scripts in &lt;i&gt;&lt;b&gt;rules&lt;/b&gt;&lt;/i&gt; file than just "&lt;i&gt;&lt;b&gt;%: dh $@&lt;/b&gt;&lt;/i&gt;", which in turn can be automatically generated by &lt;b&gt;&lt;i&gt;dh_make&lt;/i&gt;&lt;/b&gt; tool along with other files for packaging. Of course, for complex pkg and pkg using special build system, developer will likely have to manually modify &lt;b&gt;&lt;i&gt;rules &lt;/i&gt;&lt;/b&gt;and other file &lt;br /&gt;(Details please see &lt;a href="http://www.debian.org/doc/manuals/maint-guide/"&gt;Debian New maintainers' guide&lt;/a&gt;). One interest thing about DEB build files is that &lt;i&gt;&lt;b&gt;rules&lt;/b&gt;&lt;/i&gt; is actually a normal shell script and can directly launch the building or do incremental build.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;dpkg-buildpackage&lt;/b&gt;&lt;/i&gt; and &lt;i&gt;&lt;b&gt;debuild&lt;/b&gt;&lt;/i&gt; are the basic tools to generate DEB and deb source package. Once source pkg is generated even before the real building (by "&lt;i&gt;&lt;b&gt;dpkg-source -b&lt;/b&gt;&lt;/i&gt;"), "&lt;b&gt;&lt;i&gt;apt-get builddeps&lt;/i&gt;&lt;/b&gt;" can install build dependencies easily. Note that &lt;i&gt;&lt;b&gt;.dsc&lt;/b&gt;&lt;/i&gt; file for deb source pkg is generated too.&lt;br /&gt;&lt;br /&gt;To ensure pkg specifying dependencies properly so that it can be built in different environment, &lt;b&gt;&lt;i&gt;pbuilder&lt;/i&gt;&lt;/b&gt; is the easy way to verify DEB pkg building in a chroot environment as a sandbox. &lt;i&gt;&lt;b&gt;buildd&lt;/b&gt;&lt;/i&gt; is the tool to do server building for DEB, but setting up DEB build server is not easy as documentation is not easy to find.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Distribution choosing RPM can freely do the package definition, on the contrary, Debian has more influence on derived distribution than just package format because its strict packaging policy, which in fact leads to more distro compatibility among derived distro and meanwhile we can easily tell one pkg's RPM for Fedora is quite different from its RPM from OpenSUSE.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://openbuildservice.org/"&gt;Open Build Service (OBS) &lt;/a&gt;was created by OpenSUSE as an attempt to unify tools for GNU/Linux packaging, and it is really successful, though more for RPM based distro like OpenSUSE, MeeGo and Mer. It provides web UI, command line tools and back-end server setup for building packages targeting different distro. This is really great that it provides packaging project management, web interface and public server for major distros and also fills the gap for RPM packaging because there are no good and popular equivalence to Debian's &lt;i&gt;&lt;b&gt;pbuilder&lt;/b&gt;&lt;/i&gt;, &lt;i&gt;&lt;b&gt;buildd&lt;/b&gt;&lt;/i&gt;, or &lt;b&gt;&lt;i&gt;sbuild&lt;/i&gt;&lt;/b&gt; in RPM world.&lt;br /&gt;&lt;br /&gt;However, OBS doesn't really improve DEB packaging, particularly because it introduces different procedure like manual  &lt;i&gt;&lt;b&gt;.dsc&lt;/b&gt;&lt;/i&gt; file modification, not trying to follow recent changes in Debian packaging and generally deb packaging issues take more time to resolve. I view these as the major reasons OBS doesn't get much attention from Debian world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-8513120339056822194?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/8513120339056822194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2011/12/deb-vs-rpm-building-pkg.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/8513120339056822194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/8513120339056822194'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2011/12/deb-vs-rpm-building-pkg.html' title='DEB vs RPM : building pkg'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-4386891317598290449</id><published>2011-12-15T21:34:00.000-08:00</published><updated>2012-01-29T14:57:53.124-08:00</updated><title type='text'>DEB vs RPM : the tools</title><content type='html'>&lt;br /&gt;Next thing to package format is the associated packaging tools, and more differences show up:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- RPM comes with rpm, yum and zypper, while dpkg, apt/aptitude for DEB.&lt;br /&gt;- rpm and dpkg is the tools at lowest level, and actually people don't use them a lot except experienced user and developer.&lt;br /&gt;- yum and apt are most popular tools, but I never saw yum's speed is close to apt-get, partially because yum does repo update for every command.&lt;br /&gt;- zypper (or ZYPP) is the default tools in SuSE and MeeGo and aptitude is supposed to replace apt. zypper is better than yum while it isn't faster than apt. aptitute has more functionalities in one tool instead of a set of apt-xxx and it even has text based menu UI, but I notice that it runs slower when cold launch on ARM mostly because python loading is slow on less powerful ARM CPU and slower NAND or SD/eMMC generally used on ARM platform. aptitude uses apt tools while zypper only uses rpm.&lt;br /&gt;&lt;br /&gt;I don't have updated information of RPM based GUI tools as I moved away from Fedora for more than 5 years, which gave me a negative impression that it was very slow, and in fact, that was the major reason I moved to Debian based system. There are quite a few GUI package tools available for DEB such as synaptic, kpackagekit and Muon. packagekit is worth noting too as it can work with both (and more) format and usually provides an unified API for GUI frontend.&lt;br /&gt;&lt;br /&gt;Till now, all these are about normal user instead of developer, and you may find that despite some might-out-of-date information, normal user won't really care too much about RPM or DEB and they are mostly transparent in latest distribution, i.e. normal user just manages pkgs through distro provided tools w/o caring about what is used behind the scene.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-4386891317598290449?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/4386891317598290449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2011/12/deb-vs-rpm-tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/4386891317598290449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/4386891317598290449'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2011/12/deb-vs-rpm-tools.html' title='DEB vs RPM : the tools'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-904829031128627768</id><published>2011-12-15T21:21:00.000-08:00</published><updated>2012-01-29T14:55:16.839-08:00</updated><title type='text'>DEB vs RPM : the format</title><content type='html'>Even though I limited my spare time into running accelerated Plasma Active on Pandaboard, I still frequently run into questions about what distribution is the best and eventually thought about RPM and DEB since MeeGo started and both at home and work. I have my own preference already but it is not a clear win in many respects, which leads to this serial of posts so that I can write down the facts and thoughts and hopefully move on w/o thinking about it again :-)&lt;br /&gt;&lt;br /&gt;First of all, RPM and DEB are the two major package formats of Linux distributions, in case you don't know, however, arguments/fightings/flame wars over more than 15 years never ended in format itself, I won't just stop at format either while from format point's view, I can clearly say that none of them is really superior to the other with a few details to come:&lt;br /&gt;&lt;br /&gt;- They are both kind of archive of binary files of a component + config file and script for setting up. The more important part of both is dependence description, i.e., what other components are necessary to run and install it.&lt;br /&gt;- DEB uses tar, gzip and ar while rpm uses cpio for archiving, which makes me slightly lean towards DEB because the tools are arguably more popular and standard, just like Linux init ramdisk uses tar/gzip instead of initrd's cpio.&lt;br /&gt;- It is said that DEB can define dependencies in finer way by "conflict" or "break" but I suspect latest RPM supports these too.&lt;br /&gt;- RPM can define dependencies on file instead of pkgs, which is viewed as one RPM advantage. It actually makes it a little complicated when fixing dependence issues, though DEB can define finer dependencies in different way.&lt;br /&gt;- Previously, the major advantage of rpm was the mandatory signing of a package, which is also supported and forced by Debian now.&lt;br /&gt;- Source package wise, they uses different approaches as SRC-RPM is similar to RPM but packaging source code, while DEB doesn't have "source DEB" format. In Debian, source package is original source tarball + debian patch tarball + DSC file. This makes DEB system a little more complicated packaging wise, but it is easier to update. I will talk about it later.&lt;br /&gt;&lt;br /&gt;[Update on Jan 29, 2012]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-904829031128627768?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/904829031128627768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2011/12/deb-vs-rpm-format.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/904829031128627768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/904829031128627768'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2011/12/deb-vs-rpm-format.html' title='DEB vs RPM : the format'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-162079102016490054</id><published>2011-12-12T22:58:00.000-08:00</published><updated>2011-12-12T23:03:57.353-08:00</updated><title type='text'>Running Plasma Active on Pandaboard with OpenGL ES</title><content type='html'>It has been a while since I wrote down the build details of PA for Pandaboard. What I didn't mention was the procedure to run PA with software rendering because I didn't find a good way to start PA(actually plasma-device) properly. By default, plasma-desktop is launched and I couldn't replace it with plasma-device. I managed to get it running manually but didn't want to share the hacks :-)&lt;br /&gt;&lt;br /&gt;Now, I am still having similar issues but changed my focus to running accelerated PA and finally see it running much more smooth than software rendering, which makes me write down this for anyone interested.&lt;br /&gt;&lt;br /&gt;I'd like to say firstly that major work was done by linaro team and kwin/KDE developers, many thx!&lt;br /&gt;&lt;br /&gt;Also there was a little distraction that when libqt4-opengl-dev is installed in Ubuntu/Linaro, it actually brought in libgl-mesa-dev and led to auto-removal of Pandaboard's OpenGL ES lib (SGX libs). I found a quick workaround to move on. Details can be seen &lt;a href="https://bugs.launchpad.net/linaro-ubuntu/+bug/847901"&gt;in bug #847901&lt;/a&gt; and &lt;a class="bug-link" href="https://bugs.launchpad.net/bugs/897429" title="libgles2-sgx-omap4-dev should depend on libegl1-sgx-omap4-dev"&gt;Bug #897429&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;OK, now the procedure.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;0) Install proper OpenGL ES development pkgs&lt;/b&gt;&lt;br /&gt;sudo apt-get install libgles2-sgx-omap4-dev libegl1-sgx-omap4-dev&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1)Follow &lt;a href="http://ezjd.blogspot.com/2011/10/building-plasma-active.html"&gt;my previous blog&lt;/a&gt; to build KDE/PA components until kde-workspace&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2) Build kde-workspace&lt;/b&gt;&lt;br /&gt;The only deference is the build command:&lt;br /&gt;cmake ~/kdesrc/kde-workspace -DKWIN_BUILD_WITH_OPENGLES=ON&lt;br /&gt;Note: w/o this, an kwin_gles could be built but it didn't work well maybe due to incorrect gles/egl dev lib was installed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3) Finish the building&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Last thing is running. My simplest trick is to run plasma-device directly in KDE desktop. Yes, I know it is ugly :-) I will figure out the proper way after I upgrade to PA2, hopefully during holiday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-162079102016490054?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/162079102016490054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2011/12/running-plasma-active-on-pandaboard.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/162079102016490054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/162079102016490054'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2011/12/running-plasma-active-on-pandaboard.html' title='Running Plasma Active on Pandaboard with OpenGL ES'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-2170574148893356784</id><published>2011-10-24T20:34:00.000-07:00</published><updated>2011-12-12T22:27:04.785-08:00</updated><title type='text'>Building Plasma Active</title><content type='html'>Let us move to the real building journey.&lt;br /&gt;&lt;br /&gt;First of all, congratulations to &lt;a href="http://plasma-active.org/"&gt;Active One release&lt;/a&gt;. I started building PA for Pandaboard before this release but didn't get it done partially because some components was being actively developed and some breaks occurred as expected.&lt;br /&gt;&lt;br /&gt;Secondly, building instructions are available from &lt;a href="http://community.kde.org/Plasma/Active/Development"&gt;Plasma Active&lt;/a&gt;, but unfortunately the developers haven't updated it for a while and some pieces are missing, esp. like instructions for distro other than OpenSuse or MeeGo. As a result I contacted 2 key developers ( Sebastian Kügler and Marco Martin) by email and got lots of help, many thanks!&lt;br /&gt;&lt;br /&gt;Last, the details.&lt;br /&gt;&lt;br /&gt;What is the first to build? As KDE moved to git and modulization continues, a few big SVN repo were split into quite a few small git repos, therefore dependencies become a little more complicated give the fact that is not well documented.&lt;br /&gt;&lt;br /&gt;I decided to reuse as many available external depencies as possible, hence,&amp;nbsp; had to move to Ubuntu Oneiric, which will cause a little issue later on because linaro hasn't have official release based on Oneiric and yet to provide necessary OpenGL ES binary blobs for Pandaboard either. Fortunately, KDE and PA (and Qt 4.7) still support framebuffer based software rendering.&lt;br /&gt;&lt;br /&gt;After all, basically all external dependencies of PA can be retrieved from Ubuntu repo and it saved quite a lot of time for building and possibly runtime issues.&lt;br /&gt;&lt;br /&gt;Then, building KDE components one by one:&lt;br /&gt;&lt;b&gt;1) kdelibs&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;sudo apt-get install debhelper cmake pkg-kde-tools shared-mime-info dpkg-dev libphonon-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libpng12-dev libssl-dev libsm-dev flex bison libsoprano-dev libstreamanalyzer-dev libxml2-dev libxml2-utils libxslt1-dev libgif-dev libavahi-common-dev libbz2-dev libenchant-dev libjasper-dev libopenexr-dev libpcre3-dev zlib1g-dev libjpeg62-dev hspell libacl1-dev automoc libutempter-dev liblzma-dev libattica-dev shared-desktop-ontologies libpolkit-qt-1-dev libxss-dev libqca2-dev libdbusmenu-qt-dev docbook-xml docbook-xsl libxrender-dev libkrb5-dev libudev-dev libgrantlee-dev libxml-parser-perl&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/kdelibs&lt;br /&gt;git checkout KDE/4.7&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/kdelibs&lt;br /&gt;cmake ~/kdesrc/kdelibs&lt;br /&gt;time make -j2&lt;br /&gt;sudo make install &lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * -j2 effectively shortened the build time on Pandaboard.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * FindQtMobility.cmake is missing from kdelibs repo. In fact, it has to be installed to /usr//local/share/apps/cmake/modules/. I got one from Sebas fixing this problem.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * It took ~3 hours&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2) kactivities&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;No additional dependencies&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/kactivities&lt;br /&gt;git checkout master&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/kactivities&lt;br /&gt;cmake ~/kdesrc/kactivities&lt;br /&gt;time make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It only took minnutes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * kactivities was in kdelibs repo so that it has to be built and install after kde-runtime to overwrite old copy. Hopefully it is already fixed in Active 1.0 release&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3) kde-runtime&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;sudo apt-get install libsmbclient-dev libstrigiqtdbusclient-dev libxcursor-dev libasound2-dev libxine-dev libslp-dev libssh-dev libexiv2-dev shared-desktop-ontologies libntrack-qt4-dev libpulse-dev libcanberra-dev libnm-util-dev network-manager-dev quilt&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/kde-runtime&lt;br /&gt;git checkout KDE/4.7&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;&lt;br /&gt;cd ~/build/kde-runtime&lt;br /&gt;cmake ~/kdesrc/kde-runtime&lt;br /&gt;time make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took ~100mins &lt;br /&gt;&lt;br /&gt;&lt;b&gt;4) kdepimlibs (optional)&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;sudo apt-get install libgpgme11-dev libldap2-dev libsasl2-dev libboost-graph1.46-dev libical-dev libsoprano-dev xsltproc uuid-dev&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/kdepimlibs&lt;br /&gt;git checkout KDE/4.7&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/kdepimlibs&lt;br /&gt;cmake ~/kdesrc/kdepimlibs&lt;br /&gt;time make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took ~ 1 hour&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * This is first time I ever got kdepimlibs built :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5) kde-workspace&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;sudo apt-get install libdlrestrictions-dev libqimageblitz-dev libfontconfig1-dev libglu1-mesa-dev python-dev libpam0g-dev libraw1394-dev libusb-dev libpci-dev libakonadi-dev libboost1.46-dev libgps-dev libck-connector-dev libsensors4-dev libxkbfile-dev libxrandr-dev libxcomposite-dev libxft-dev libxtst-dev libxinerama-dev libxi-dev libqalculate-dev python-sip python-qt4 libdmtx-dev libprison-dev phonon-backend-gstreamer&lt;br /&gt;&lt;br /&gt;sudo ln -s /lib/libpci.so /usr/lib/libpci.so&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/kde-workspace&lt;br /&gt;git checkout KDE/4.7&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/kde-workspace&lt;br /&gt;cmake ~/kdesrc/kde-workspace&lt;br /&gt;time make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took ~3.5 hours&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * It is not mentioned as dependencies of plasma-mobile, but it is necessary.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * I referred to Ubuntu KDE pkgs for dependencies, but didn't install python-kde4, python-sip and python-qt4 because they brought in the stock version of KDE components from Ubuntu. However, python support is missing in my build.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6) share-like-connect&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;No additional dependencies&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/contour&lt;br /&gt;git checkout master&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/share-like-connect&lt;br /&gt;cmake~/kdesrc/share-like-connecttime&lt;br /&gt;make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took minutes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Actually Active/1.0 branch is available now, but I didn't try.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7) contour&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;No additional dependencies&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/contour&lt;br /&gt;git checkout master&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/contour&lt;br /&gt;cmake~/kdesrc/contourtime&lt;br /&gt;make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took ~ 3min&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Actually Active/1.0 branch is available now, but I didn't try since contour actually is disable by default in Active 1.0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;8) plasma-mobile&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;No additional dependencies&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/plasma-mobile&lt;br /&gt;git checkout master&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/plasma-mobile&lt;br /&gt;cmake~/kdesrc/plasma-mobiletime&lt;br /&gt;make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took ~ 30 min&lt;br /&gt;&amp;nbsp; &amp;nbsp; * This is the core component for Plasma Active mobile and tablet UI. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Actually Active/1.0 branch is available now, but I didn't try.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;9) kde-baseapps (optional)&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;No additional dependencies&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/kde-baseapps&lt;br /&gt;git checkout KDE/4.7&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/kde-baseapps&lt;br /&gt;cmake ~/kdesrc/kde-baseapps&lt;br /&gt;time make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took ~30Mins &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;10) konsole (optional)&lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;No additional dependencies&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://anongit.kde.org/konsole&lt;br /&gt;git checkout KDE/4.7&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/konsole&lt;br /&gt;cmake ~/kdesrc/konsole&lt;br /&gt;time make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took ~ 5min &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;11) bangarang (optional) &lt;/b&gt;&lt;br /&gt;-- Dependencies&lt;br /&gt;sudo apt-get install libtag1-dev&lt;br /&gt;&lt;br /&gt;-- Retrieve source code&lt;br /&gt;cd ~/kdesrc/&lt;br /&gt;git clone git://gitorious.org/bangarang/bangarang.git&lt;br /&gt;git checkout KDE/4.7&lt;br /&gt;&lt;br /&gt;-- build&lt;br /&gt;cd ~/build/bangarang&lt;br /&gt;cmake ~/kdesrc/bangarang&lt;br /&gt;time make -j2&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;&amp;nbsp; &amp;nbsp; * It took ~15min&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * It actually is developed outside of KDE projects&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-2170574148893356784?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/2170574148893356784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2011/10/building-plasma-active.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/2170574148893356784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/2170574148893356784'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2011/10/building-plasma-active.html' title='Building Plasma Active'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-8318095993301806119</id><published>2011-09-17T21:44:00.000-07:00</published><updated>2011-09-17T22:11:25.974-07:00</updated><title type='text'>Build Plasma Active: environment</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I have been strugling with KDE Plasma Active building for months, even though I can only contribute less than 8 hours per week :-)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Due to lack of usable building document, building KDE is always like a mistery. Even with kdesrc-build's help, it only becomes easier, for x86 platform only. As I am trying to use my Panda board, it makes it more difficult. Also it is now a little more restricted that Plasma Active requires Open GL or GL ES (unfortunately), therefore, I have to use Ubuntu/Linaro since it has fairly latest OMAP4 support including GUI like OpenGL ES 2.0. Well, I haven't really run Plasma Active on Panda board, but it is good time to record what I learned.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;BTW, seems KDE team prefers OpenSUSE, which doesn't have an official ARM port or MeeGo, which is dying. Even for MeeGo ARM port, I don't know how well Plasma Active runs since it only supports N900, unofficially.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I started with Linaro 11.08 release. It is based on Ubuntu Natty and Linux 3.0 and runs pretty well on Panda board. First question is which KDE components I should build. According to Plasma Active wiki, I only need kdelibs and kde-runtime befor building plasma-mobile. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Then, fun journey started.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;All old instruction for building kdelibs is much harder to find and they are supposed to be replaced by current incomplete wiki pages. This led me to try out kdesrc-build (was kdesvn-build last time I tried). However, it couldn't help me to install necessary dependencies. Eventually, I found kde4libs' deb source and .dsc files in Ubuntu package and used it to install necessary packages, and to my surprise, I successfully built kdelibs for ARM w/o changing anything. But building kde-runtime failed due to one dependency is too old in Natty. Even though I hacked the system to make building continuing, I knew that it won't run afterwards. Thus, I have to move to Oneiric.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Another interesting thing I found is that qemued ARM building on X86 didn't run properly on my own desktop while seems OK on another PC. So all successful build I did is on real ARM chip-OMAP4 and it is much faster :-)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;But for Oneiric, things changed a lot. Firstly, no working linaro snapshot based on Oneiric is working now, secondly, Ubuntu Oneiric beta and daily image have several other problems. Even though I finally got Kubuntu one working on Panda board, I then messed up the installation by installing lightDM :-(. At last, I couldn't get chroot working either, whether I did it natively (x86 or ARM) or using NFS.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;However, I found netboot image for ARM is available so that I download related files and copy to SD card. Finally I am able to install a minimal Ubuntu on Panda board and able to install other DE like Lubuntu desktop the same way as I did with x86 desktop! With a little tweak with u-boot boot script, I am able to install and run rootfs on a USB drive instead, which I planned long ago and is proved to be faster than SD card as expected!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Here are details:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;i&gt;* Download u-boot, kernel and initrd from http://ports.ubuntu.com/ubuntu-ports/dists/oneiric/main/installer-armel/current/images/omap4/netboot/&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- u-boot.bin, uImage and uInitrd&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- I used boot.scr-fb &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;to enable console on screen (framebuffer)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;i&gt;* Install Ubuntu&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- OpenSSH server and Lubuntu core was selected as extra components.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- Use USB stick instead of SD card to install.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- Grub installation failed as expected, but ignore this and finish installation.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- Create a SD card using http://cdimage.ubuntu.com/daily-preinstalled/current/oneiric-preinstalled-desktop-armel+omap4.img.gz then use this SD or copy the first FAT patition to anther SD card for booting.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- Create a script file - boot.sh from boot.scr by stripping u-boot header.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- Modify "root=xxxx" to "root=/dev/sda1" (Device name can get from kernel boot log).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- Generate boot.scr by "mkimage -A arm -T script -C none -n "Ubuntu boot script" -d boot.sh &lt;/span&gt;&lt;/span&gt;&lt;boot script=""&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;boot.scr"&lt;/span&gt;&lt;/span&gt;&lt;/boot&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- Now, USB stick rootfs can boot with this SD card.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  -- Lubuntu core doesn't install DM so install GDM after booting&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="  -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;(To be continued)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-8318095993301806119?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/8318095993301806119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2011/09/build-plasma-active-environment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/8318095993301806119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/8318095993301806119'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2011/09/build-plasma-active-environment.html' title='Build Plasma Active: environment'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-2766867566317736219</id><published>2011-02-05T11:49:00.000-08:00</published><updated>2011-05-01T14:32:39.639-07:00</updated><title type='text'>Developing using Panda Board - distribution</title><content type='html'>&lt;div&gt;When I got Pandaboard, I just hoped I just could use existing Ubuntu and Android instruction for PandaBoard. Unfortunately, both are not working for me.&lt;/div&gt;&lt;div&gt;-- Only Ubuntu 10.10 runs smoothly even though with a hot OMAP chip, i.e., CPU scaling and power saving isn't working. And I wasn't unable to easily use lastest KDE SC techniques such as Plasma Mobile and KWin over OpenGL ES, etc.&lt;/div&gt;&lt;div&gt;-- Pandroid stays at Android 2.2 and it is always less important to me as you may already know :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, I started to think doing things cleanly from scratch:&lt;/div&gt;&lt;div&gt;First thing first -- Picking a Linux distribution&lt;/div&gt;&lt;div&gt;Requirements:&lt;/div&gt;&lt;div&gt;-- Full feature distribution instead of an "embedded" one&lt;/div&gt;&lt;div&gt;    Normally embedded linux distro is &lt;/div&gt;&lt;div&gt;    a) Small foot print (RAM &amp;lt;= 16MB and rootfs &amp;lt;= 16MB), in another word, very few modules available.&lt;/div&gt;&lt;div&gt;b) Heavily stripped down (very limited UI stack)&lt;/div&gt;&lt;div&gt;    c) Some components are really old, like kernel&lt;/div&gt;&lt;div&gt;    d) Some pkgs are not commonly used in desktop distro like busybox&lt;/div&gt;&lt;div&gt;    e) Normally doesn't support package system and run-time update/upgrade&lt;/div&gt;&lt;div&gt;    f) Normally building in 'embedded' way, like building image together and assuming downloading/flashing to device, i.e., less flexible&lt;/div&gt;&lt;div&gt;    g) But now mobile device is NOT traditional embedded device any more!&lt;/div&gt;&lt;div&gt;-- A modern distribution well maintained by community&lt;/div&gt;&lt;div&gt;    Debian, Ubuntu, Gentoo, MeeGo&lt;/div&gt;&lt;div&gt;    Debian: well maintained ARM port but rather old pkgs&lt;/div&gt;&lt;div&gt;    Ubuntu: with Linaro effort, it is really ARM friendly and most up-to-date&lt;/div&gt;&lt;div&gt;    Gentoo: Highly customizable but no pre-built offical binary pkgs and smaller community&lt;/div&gt;&lt;div&gt;    MeeGo:  Defined as mobile distribution and suppose to be ARM friendly but not seems to be and much less mature than Ubuntu, and more close and less friendly to community. (Update: as Nokia effectively left MeeGo which leaves the future of ARM port in the air, and unfortunately, no other ARM vendor joined so far)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-- A Qt friendly distribution&lt;/div&gt;&lt;div&gt;    MeeGo is the only Qt based distribution.&lt;/div&gt;&lt;div&gt;    Ubuntu is not based on Qt but community is actively bring in latest Qt to Ubuntu. And one thing is really atracting me attention is that Linaro provides a Plasma-Mobile based image. (Update: Linara Plasma -mobile image is dead, but Plasma-Active started! Even though it is not ARM friendly so far)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-- KDE friendly&lt;/div&gt;&lt;div&gt;    Unfortunately none of them uses KDE by default. Only (K)ubuntu is a little bit closer.&lt;/div&gt;&lt;div&gt;-- Pandaboard friendly&lt;/div&gt;&lt;div&gt;    Only Ubuntu provides official omap4 kernel and image.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I don't really have second choice other than Ubuntu/Linaro.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-2766867566317736219?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/2766867566317736219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2011/02/developing-using-panda-board.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/2766867566317736219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/2766867566317736219'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2011/02/developing-using-panda-board.html' title='Developing using Panda Board - distribution'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-3686486873400507442</id><published>2011-02-05T10:43:00.000-08:00</published><updated>2011-02-05T11:49:07.204-08:00</updated><title type='text'>New Panda and New Year</title><content type='html'>I've been quiet for a while because every year I am always busy for a couple of months before year end and one major reason is that CES is always just after New Year. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But 2010 is a little different due to &lt;a href="http://pandaboard.org/"&gt;PandaBoard&lt;/a&gt; was deput in October 2010. And after a whole month waiting, I received it in the end of November. I did complaint about the waiting but I realize now that I was lucky as the backorder takes more than 3 months now :-) and I recieved one of the first 1500 boards.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did have a big plan for it:&lt;/div&gt;&lt;div&gt;-- Benchmark Cortex-A9 and comparing with Intel Core i3&lt;/div&gt;&lt;div&gt;-- Try out Plasma mobile&lt;/div&gt;&lt;div&gt;-- Build a solid development envoriment for future.&lt;/div&gt;&lt;div&gt;-- Etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You may already notice the last "Dev Env" one should be the highest priority, which I learned in the previous months ...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-3686486873400507442?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/3686486873400507442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2011/02/new-panda-and-new-year.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/3686486873400507442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/3686486873400507442'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2011/02/new-panda-and-new-year.html' title='New Panda and New Year'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-4657934576893833006</id><published>2010-06-26T10:23:00.000-07:00</published><updated>2010-06-26T11:38:58.317-07:00</updated><title type='text'>KDE and Mobile - Build KDE in Kubuntu 10.04</title><content type='html'>&lt;div&gt;As MeeGo has actually mixed GTK and Qt framework, i.e. much less integrated at application framework level than claimed and expected, I was thinking to find some thing more ideal to me, a pure Qt based UI/App framework.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Actually there is only one choice: KDE. While along with KDE4 is maturing, it extends its arena from desktop to netbook., originally, I thought few people in KDE community would be interested in mobile device world (see&lt;a href="http://aseigo.blogspot.com/2010/01/key-quest-device-spectrum.html"&gt; this&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fortunately, Marc Martin sent &lt;a href="http://lists.meego.com/pipermail/meego-dev/2010-April/001603.html"&gt;an email&lt;/a&gt; to MeeGo dev maillist caught my attention (though seems only mine) and I realized that KDE community is still thinking about mobile devices, and the first step is &lt;a href="http://lists.kde.org/?l=kde-core-devel&amp;amp;m=127107095103573"&gt;KDE platform profiles&lt;/a&gt;, which, in my opinion, is modular KDE libraries and infrastructure. Soon after that, &lt;a href="http://techbase.kde.org/Projects/KDE_on_Maemo/PlatformModifications"&gt;this&lt;/a&gt; was created to show the related tasks and progress.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Seems things changed besides the name now is KDE mobile and KDE people probably focus more on specific application like Kontact on mobile device instead of KDE framework. Because I didn't involve in KDE development or even closely tracking KDE maillist, I don't know if it is direction change or just limited resource wanted to focus on smaller tasks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But what interest me is the idea of KDE platform profiles because it is a necessary step for KDE to become a unified platform to various targets, in another word, scalability is what KDE needs even if mobile devices are its second-level target.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;KDE has a relatively bad reputation about resource usage because base KDE framework seems taking more disk space and RAM than GNOME. I don't have real data to compare because I don't have GNOME installed on any of my PCs, at work or at home, however, I have minimal Ubuntu + kde-minimal installed with 1.4 GB disk and ~150MB RAM after boot up so that I suspect it is just perception from biased experience because I think, for example, KDE runing KOffice will take less resource than GNOME + OpenOffice. But it doesn't matter whether KDE is more bloated than GNOME or not, instead, whether KDE has a good enough modular infrastructure matters. To be fair, KDE team did great job to do modular-wise improvement since KDE 4.3, however, I am not sure if I can fit KDE with necessary applications in 1GB flash(uncompressed) and 512MB RAM along with other necessary components for a distribution (Actually I was thinking of 512MB flash but I don't see it worths the effort to do that).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Due to fail to get clear idea of KDE resource usage by googling, I decided to do it by myself -- build KDE and profiles from scratch.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What surprised me is that as a long time KDE user and a software developer for more than a decade, it was really a challenge to me partially because information in techbase.kde.org is out of dated, esp. for Debian/Ubuntu part and partially I chose a wrong way to do it: installing necessary packages from distribution (Kubuntu) and build KDE itself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eventually I found &lt;a href="http://kdesvn-build.kde.org/"&gt;kdesvn-build&lt;/a&gt; script though the web site is down for a while. Thanks to the maintainer Michael Pyne's help I download this script from kdesdk SVN repository and it works perfectly! Here is the steps. Note that I choose to use chroot so not to mess up with my desktop which I use daily and right now it is for x86 only.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;1) Use pbuilder to create base rootfs (&lt;a href="https://wiki.ubuntu.com/PbuilderHowto"&gt;ref1&lt;/a&gt;, &lt;a href="https://wiki.ubuntu.com/PackagingGuide/Complete"&gt;ref2&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;sudo apt-get install pbuilder debootstrap devscripts&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;sudo pbuilder create --components main restricted universe multiverse&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2) Enter new rootfs after pbuilder creation is done&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;cd ~; mkdir dev-rootfs; cd dev-rootfs&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;tar xf /var/cache/pbuilder/base.tgz&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo mount /proc /home/ezjd/KDE/&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;dev-rootfs/proc/ -o bind&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo mount /dev/pts /home/ezjd/KDE/&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;dev-rootfs/dev/pts -o bind&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;chroot ~/dev-rootfs&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;#add new user for KDE build instead of root&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;adduser builder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3) Install minimal set of packages (&lt;a href="http://techbase.kde.org/Getting_Started/Build/KDE4/Kubuntu_and_Debian"&gt;ref&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;aptitude install build-essential subversion git-core xorg-dev cdbs debhelper cmake \&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;kdesdk-scripts subversion ssh xserver-xephyr doxygen dbus-x11 \&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;libxml2-dev libxslt1-dev shared-mime-info libical-dev libgif-dev libssl-dev \&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;libboost-dev libgpgme11-dev libxine-dev \&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;libqimageblitz-dev libbz2-dev libdbus-1-dev libpam0g-dev libpcre3-dev \&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;libkrb5-dev libsm-dev libclucene0ldbl libclucene-dev libjpeg62-dev \&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;libxtst-dev xsltproc libxrender-dev libfontconfig1-dev automoc librdf0-dev \&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;libdbusmenu-qt-dev docbook-xsl docbook-xml \&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;libglib2.0-dev libboost-program-options1.40-dev libsasl2-dev libxml2-utils libboost-graph1.40-dev&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4) Get&lt;a href="http://techbase.kde.org/Getting_Started/Build/kdesvn-build"&gt; kdesvn-build&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;su builder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;export SVN_ROOT=svn://anonsvn.kde.org/home/kde&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;svn cat $SVN_ROOT/trunk/KDE/kdesdk/scripts/kdesvn-build &gt; kdesvn-build&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;svn cat $SVN_ROOT/trunk/KDE/kdesdk/scripts/kdesvn-buildrc-sample &gt; ~/.kdesvn-buildrc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;chmod +x kdesvn-build&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;5) build&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;./kdesvn-build&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Totally it took &gt; 4 hours on my AMD Atholon64X2 2GHz desktop.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next step I will try different profile and ARM build.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-4657934576893833006?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/4657934576893833006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2010/06/kde-and-mobile-build-kde-in-kubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/4657934576893833006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/4657934576893833006'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2010/06/kde-and-mobile-build-kde-in-kubuntu.html' title='KDE and Mobile - Build KDE in Kubuntu 10.04'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-7439382053012450938</id><published>2010-05-29T13:48:00.000-07:00</published><updated>2010-05-29T15:46:01.030-07:00</updated><title type='text'>Right after MeeGo 1.0</title><content type='html'>Finally&lt;a href="http://meego.com/community/blogs/imad/2010/meego-v1.0-core-software-platform-netbook-user-experience-project-release"&gt; MeeGo v1.0 released&lt;/a&gt; as expected, did things changed?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is been 3 months with MeeGo, and time to summarize.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Contribution to MeeGo: Not too much except 1) answered a few questions to help people who are not very familiar with Linux or embedded Linux 2) clarified some wrong understanding of MeeGo though a little misleading in Qt part :-(&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since I don't want to be a paid contributor of MeeGo because I want to think and talk following my own expertises, what I wanted to contribute inevitably became arguing with people:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-- OpenGL&lt;/div&gt;&lt;div&gt;Started in IRC and Maemo talk, I asked why QtGLWidget is used for Handheld compositor, which implies that HW OpenGL support is necessary to run MeeGo. I got that this is intention that MeeGo will ONLY run on platform with HW 3D acceleration. I wrote 3 arguments for that:&lt;/div&gt;&lt;div&gt;a) Even though OpenGL seems to be default HW in the future, a lot of targeted devices doesn't or will not have it for cost reason at least. &lt;/div&gt;&lt;div&gt;b) Developing GL driver for X isn't easy and normally it will be proprietary, so that developer needs the capability to run the software before it is ready.&lt;/div&gt;&lt;div&gt;c) Qt graphic system has the capability to switch renderer between GL based and SW painter based with almost no code change. (Actually that is one of Qt cross platform advantages). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I didn't get direct answers to them, instead, was told that it is a "done deal" because MeeGo is for the future.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Interestingly, I read &lt;a href="http://www.phoronix.com/scan.php?page=article&amp;amp;item=gallium3d_llvmpipe&amp;amp;num=1"&gt;an article&lt;/a&gt; recently and it indicates that LLVMpipe might be a solution to my concerns though it is based on Gallium3D which Intel seems want to stay away from.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-- Intel CPU and SSSE3&lt;/div&gt;&lt;div&gt;This was started by another developer who figured out that MeeGo day 1 release doesn't work on old Intel CPU, then Intel engineers said that MeeGo requires SSE3 (which eventually turned to SSSE3). Even though I can still run this release on my AMD PC, I expressed my concern about implied CPU requirement. I discussed with another Intel engineer about whether AMD CPU supports SSSE3 or not, but no AMD CPU with SSSE3 was found.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don't have time and hardware to really test the benefit of SSSE3 so that I only discussed it in another angle: barrier to MeeGo adoption though not many people cared about it in the mail list.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-- MeeGo adoption&lt;/div&gt;&lt;div&gt;Along with IDF in Beijing, MeeGo announced a list of supporters. There was a topic people cheering about we have so many supporters already. I smiled it firstly but couldn't help to write down my opinion:&lt;/div&gt;&lt;div&gt;MeeGo lacks of supports from ARM companies, other x86 CPU companies, mobile carriers, and major cell phone companies (except Nokia :-) ), and implied that it was too early to celebrate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the contrary, Android almost have all of these as supporter even though it has its own issues, which MeeGo hasn't got chance to face.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This definitely upset people though no arguing actually happened.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  &lt;/div&gt;&lt;div&gt;-- Qt as primary UI toolkit&lt;/div&gt;&lt;div&gt;This happened just after 1.0 released. A developer talked about Qt's position in the release. Intel engineers finally said that Netbook UX will stay with GTK applications. I was confused and asked in email about the decision. Firstly I was confirmed with my original understanding that Qt will be primary UI toolkit for MeeGo then I called for more community effort to help porting existing GTK app. Unfortunately, this touched the bottom line of many engineers who had more internal information than me. People rushed in to explain why GTK apps are kept and why they should in the future and even implied me that Handheld UX will be totally Qt based and that is what I care about.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But that wasn't my point. I only worried about whether MeeGo will have an unified framework and questioned about how decision was made.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now actually I found I should realize this long ago when I was wondering why nobody discussed Qt transition in the first place: Qt transition is not gonna happen with GTK people. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-- MeeGo based on Fedora&lt;/div&gt;&lt;div&gt;In forum, one member asked what distribution MeeGo is based on, and people started again to explain that MeeGo is an independent distribution. This already happened in mail list a few weeks ago.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I simply listed what I found, which proved that MeeGo is actually Fedora based distribution and MeeGo should credit Fedora for any existing good infrastructure it established.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am not a Fedora fan, but I believe this is common sense in open source world that when something is reused in own project, one should show respect to the author.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-- Push to openness&lt;/div&gt;&lt;div&gt;Openness, openness, openness, people periodically talked about it in mail list :-) All the efforts happened were just asking for more patient in community and wait. At the same time, companies talked loudly in public that MeeGo's major advantage is openness.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Along with less and less people talked about it again and the silence cycle is extending, I suspect people won't really care about it in the future because people will get used to the "open" way of  MeeGo development.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;BTW, it is rare but did have one case people agreed with me: we need a local OBS build environment though no follow-up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What is the future of MeeGo? Will it be DOA or beat Android, iPhone OS, webOS, bada, even Symbian technically and commercial wise?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let us wait and see ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-7439382053012450938?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/7439382053012450938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2010/05/right-after-meego-10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7439382053012450938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7439382053012450938'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2010/05/right-after-meego-10.html' title='Right after MeeGo 1.0'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-7938691424173920241</id><published>2010-04-24T13:33:00.000-07:00</published><updated>2010-04-24T14:20:50.019-07:00</updated><title type='text'>Android or MeeGo?</title><content type='html'>Recently, I read an article: &lt;a href="http://www.visionmobile.com/blog/2010/04/is-android-evil/"&gt;is Android evil?&lt;/a&gt; I was surprised that somebody else did summarize the close nature of Android. Seem the author has more internal information than average open source community member like myself. But since this blog would attract a lot of eyeballs, as least I feel, I was shocked that it wasn't widely quoted so that I just happened to find it.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I was thinking about openness of MeeGo, &lt;a href="http://www.intel.com/idf/"&gt;IDF Beijing&lt;/a&gt; held &lt;a href="https://intel.wingateweb.com/bj10/scheduler/catalog/catalog.jsp"&gt;a few technical seminars&lt;/a&gt; about MeeGo following by &lt;a href="http://events.linuxfoundation.org/events/collaboration-summit/agenda"&gt;LF collaboration summit&lt;/a&gt;, which also presented a few talks about MeeGo. In IDF presentations, MeeGo was referred several times as "MeeGo = Moblin + best of Maemo", and thus I couldn't help to thinking MeeGo as "Moblin NG", which I used in a post in MeeGo forum. On the contrary, in all the information I can get from LF summit, MeeGo was never been defined like this, and unfortunately, few slides or documents was published (or even created?) for LF summit. This week, &lt;a href="http://trac.tspre.org/meetbot/meego-meeting/2010/meego-meeting.2010-04-21-18.58.html"&gt;MeeGo TSG meeting&lt;/a&gt; was back, but few things were changes except everyone *agreed* openness is important.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then I found &lt;a href="http://lwn.net/Articles/383276/"&gt;this&lt;/a&gt; talking about Android "fork" of kernel again, and from comments, I also found &lt;a href="http://mdzlog.alcor.net/2009/10/26/open-vs-open-vs-open-a-model-for-public-collaboration/"&gt;this&lt;/a&gt;. So what level of openness Android and MeeGo are at now? I'd say pretty much same -- "Available" though MeeGo has more code unavailable so far.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What is the advantage of openness MeeGo has over Android?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-7938691424173920241?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/7938691424173920241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2010/04/android-or-meego.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7938691424173920241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7938691424173920241'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2010/04/android-or-meego.html' title='Android or MeeGo?'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-7444350532113455430</id><published>2010-04-09T15:56:00.000-07:00</published><updated>2010-04-09T16:15:48.887-07:00</updated><title type='text'>MeeGo: Day Zero to Day One</title><content type='html'>WARNING: I don't have a role in MeeGo nor am I paid to contribute to MeeGo (well, I haven't contributed much) so that I only represent myself.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I defined MeeGo Day Zero (Feb 15th, 2010) when &lt;a href="http://meego.com/community/blogs/imad/2010/welcome-meego"&gt;MeeGo project was announced&lt;/a&gt; and &lt;a href="http://www.meego.com/" target="_blank"&gt;www.meego.com&lt;/a&gt; went alive. And MeeGo Day One, &lt;a href="http://meego.com/community/blogs/imad/2010/day-1-here-opening-meego-development"&gt;Mar. 30, 2010&lt;/a&gt; was &lt;a href="http://meego.com/community/blogs/valhalla/2010/towards-day-one" target="_blank"&gt;officially announced&lt;/a&gt; on Mar 3rd, 2010.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was excited about MeeGo from Day Zero and joined MeeGo immediately. But people may notice that Day One was publicly announced 2 weeks later. Between these 2 weeks, people kept talking, asking even debating on the mail list and IRC channel simply because MeeGo started with very limited public information about whole architecture and even time frame.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As matter of fact, &lt;a href="http://meego.com/" target="_blank"&gt;meego.com&lt;/a&gt; did clearly say that rpm is the packaging format and OBS is the building system. There wasn't too many questions around OBS since it even isn't available after Day One, but for rpm decision, I can even say that a flame war has been a while because obviously, Maemo people already got used to deb and tools and I believe that is also a major reason some people really love Maemo like me. Although people are silence about it now, probably because they realized that it's not gonna change, the community didn't really get the technical reason(s) why rpm was chosen. It happened before in Moblin when it moved to fedora based distribution because of rpm, but no compelling reason was given about rpm advantage except for some vague license information "problems" with deb. I personally don't care about rpm and deb, but regarding tools to support package management, I strongly prefer the Debian ones. Anyway I can live with rpm decision, which turned out that zypper is the comparable tool to apt/aptitude in MeeGo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another big thing clearly stated from Day Zero was that Qt is preferred App/UI framework for MeeGo. I was very happy with it but I did expect even bigger flame war regarding Qt vs GTK was gonna happen because I think Moblin community should have a lot to say just like so many flame wars about GNOME vs KDE. I was wrong because I didn't even see much discussion in MeeGo mail list or IRC, as a result, I suspected that Moblin community runs very different from Maemo's, and I feel the latter is more like any other open source community.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These are very good examples about closed development as decision is made behind closed-door and in this case, I am still curious about how Intel and Nokia did the negotiation :-) Did these drive away some developers? I'm afraid so though I stayed when more reality in mind.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(Another big discussion was about whether N900 will have MeeGo support or not but I didn't follow because N900 is too expensive to me :-(  )&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd like to express my appreciation to people standing out during these weeks to build/merge community because I can tell they were doing the job for the good of MeeGo not Nokia or Intel (not directly :-) ) even when most of them are paid by them. And they are still doing the same thing now and I do hope these will continue forever.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After Day One was announced, I could image people were eager to see what would go public, just like me. But I did have unrealistic expectation while waiting as I wanted to see an open MeeGo development would be there within ~6 weeks. It turned out that such thing will never happen for any company-found project in such short time period.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On Day One we basically got a lot of code and nothing else. (To be fair, we got &lt;a href="http://meego.gitorious.org/"&gt;git repository&lt;/a&gt;, &lt;a href="http://repo.meego.com/"&gt;package repository&lt;/a&gt;, &lt;a href="http://bugzilla.meego.com/"&gt;bugzilla&lt;/a&gt;, &lt;a href="http://meego.com/developers/meego-architecture"&gt;more details in MeeGo architecture&lt;/a&gt;, etc. along with the code, but what else?) Someone described this the same as "Android codedump" which really said it. Even though, people including me still were enthusiastic to ask questions, help others and try to start as much as discussion in mail list after that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another interesting thing I noticed later is that Novell started involvement in MeeGo in early days, but it wasn't very visible to me at least.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-7444350532113455430?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/7444350532113455430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2010/04/meego-day-zero-to-day-one.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7444350532113455430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7444350532113455430'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2010/04/meego-day-zero-to-day-one.html' title='MeeGo: Day Zero to Day One'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-2055133851793319642</id><published>2010-04-02T16:15:00.000-07:00</published><updated>2010-04-02T18:39:35.475-07:00</updated><title type='text'>Before MeeGo</title><content type='html'>As all my career is on embedded system, now embedded linux, I have been looking for a open source linux distribution for embedded system. Note that this "embedded" system isn't about traditional embedded system with very limited hardware resource and simple UI or even no GUI at all. Well, I should use the term "mobile device", for example iPhone, but right now most of Linux system for mobile device developing follows the same way traditional embedded linux  is doing: cross compiling, image flashing, and so on.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have alway been thinking of a different way to develop mobile device: the DESKTOP way.&lt;/div&gt;&lt;div&gt;-- Package based rootfs management so that it is not necessary to re-flash the whole image when only some portion of image is changed, and it provides the flexibility and capability of runtime upgrade as well. More important, no need to build whole software stack when you really just change a component.&lt;/div&gt;&lt;div&gt;-- Native compiling to ease the burden to patch components which doesn't support cross-compiling well. Yes, to develop ARM on x86 will need some kind of cross compiling, but thanks to qemu and binfmt, it can be done just like native compiling and it can even been accelerated by crosscompling with some tricks. Furthermore, &lt;a href="https://build.opensuse.org/"&gt;OpenSUSE build service&lt;/a&gt; provides a cloud-like build farm to accomplish that.&lt;/div&gt;&lt;div&gt;-- Rich GUI. UI is even more important than before, maybe just because iPhone makes cell phone makers realize they are far behind. However, does Linux for mobile have to replace whole UI stack to catch up iPhone? Seems the answer is YES to Google Android but it is really NO to me. I have the faith in X11 because it is still the most matured UI system on Linux though I dislike the complicated driver model and other legacy stuffs. Actually, most of criticism around X11 like being bloated and inefficiency are just vague argument and untrue on today's powerful hardware.&lt;/div&gt;&lt;div&gt;-- UI framework and UI toolkit. The major benefit with a well designed UI framework is to largely simplify the GUI application development. A UI framework is tightly coupled with underlying UI toolkit and my preference is Qt. I know that someone still say that GTK is better. But nowadays, GTK isn't at the same level as Qt anymore, just as Nokia names Qt an application and UI framework instead of an UI toolkit and GTK lacks the portability as Qt has too.&lt;/div&gt;&lt;div&gt;-- Application. Designing application was very similar with designing middle-ware because they both employed C or C++. Java was trying to take over what C/C++ dominated but far from succeeding. Some scripting languages like python and even "web language" JavaScript went one step further to ease the developer but basically they has same principle in blood: developer has to think in programmers' way, even though people need much less training and experience to write a pretty good application with them. However, it seems no better way to do application than these now. QML is a very interesting attempt to totally change application development. Yes it uses JavaScript but it isn't necessary to write much JavaScript code and it (with Qt) tries to create a new approach to design UI based on canvas(graphic view) instead of traditional widget/layout. Let us see where it will lead to in the future.&lt;/div&gt;&lt;div&gt;-- Web application or native application? I expect there will be a mix for a long time. Fortunately Qt provides integration at application framework level.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But I was disappointed that most of  effort to make a desktop Linux distribution for mobile device failed or are still struggling because of, I think, a few of business reasons. For example, Ubuntu started a mobile project but nothing excited about it and obviously Ubuntu/Canonical is focusing on netbook only now. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Debian is a little different as Embedded Debian has been there for quite a while and Grip was created to provide package compatibility with desktop Debian. Frankly, Grip is really good though it hasn't reached product quality yet. But I suspect it will land on many mobile device as a pure open source distribution by community only.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A few year ago, Google bought Android and started this "open source" OS for mobile phone. I was really excited then because Google's money and influence are really what a Linux mobile distribution need and hard to find. Unfortunately, a few years later, even though Android is picking up traction now, I realized Android is just another commercial mobile phone OS, which "happened" to use Linux kernel and has source code available to public.&lt;/div&gt;&lt;div&gt;-- Android was designed for mobile phone only. Interestingly, although companies are keen to port Android to other mobile devices, it shows lack of flexibility to be adapted to different screen and different user interaction model, furthermore, it still lacks of support from big cell phone market players.&lt;/div&gt;&lt;div&gt;-- Android is being designed in a closed way just like RIM or Apple. Now everyone can feel the absolute control from Google on Android. I even suspect that some technical decisions are made just because of this so that Google can control the non-standard API and components to ensure software written for Android has to be what Google wants it to be. It seems that most of source code is available so that everyone can do whatever they want with it but no Android fork will be able to compete with Google Android because they will never have the money and manpower Google has. Also Google is very sensitive with deploying their proprietary applications because it is for its good only.&lt;/div&gt;&lt;div&gt;As matter of fact, I am not qualified to analyze Android in detail from technical perspective because I haven't read Android code for more than a year, but I doubt it is quite different from the 1.0/1.5 code I ever read.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://maemo.org/"&gt;Maemo &lt;/a&gt;is similar with Android except it is based on normal Linux software stack and operated in a much more open manner. But because it had a few proprietary components and some information was hidden, I wasn't able to really spend much time on it until &lt;a href="http://wiki.maemo.org/Mer"&gt;Mer&lt;/a&gt; was started.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mer met the expectation I like for a mobile linux distribution except for its lack of commercial supporter. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I was waiting for Mer to move to Qt following Maemo, surprisingly &lt;a href="http://meego.com/community/blogs/imad/2010/welcome-meego"&gt;MeeGo was announced&lt;/a&gt;. At first glance, it is exactly the Linux distribution what I was dreaming for (well except for rpm decision).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-2055133851793319642?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/2055133851793319642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2010/04/before-meego.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/2055133851793319642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/2055133851793319642'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2010/04/before-meego.html' title='Before MeeGo'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-1444703021116842309</id><published>2010-04-02T16:05:00.000-07:00</published><updated>2010-04-02T16:20:09.612-07:00</updated><title type='text'>Virtualization is "less" important to me</title><content type='html'>I haven't updated my blog for quite few months and won't see I will have much time on VBox in near future. It doesn't say that I won't use VBox, on the contrary, I use it everyday, esp. after I found it performs much better on my new i3 laptop with 3.1.x releases. I just want to be more focus on other things like some open source embedded open source projects.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, I didn't write a single line of code for VBox though I did help people and report problems on&lt;a href="http://forums.virtualbox.org/"&gt; forum&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But I will keep an eye on KVM for desktop virtualization and VirtualBox in the future because they are really good tools to do developing :-)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-1444703021116842309?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/1444703021116842309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2010/04/virtualization-is-less-important-to-me.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/1444703021116842309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/1444703021116842309'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2010/04/virtualization-is-less-important-to-me.html' title='Virtualization is &quot;less&quot; important to me'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-730509228590721885</id><published>2009-10-25T14:21:00.000-07:00</published><updated>2009-11-01T20:16:04.473-08:00</updated><title type='text'>Kubuntu 9.10 wireless</title><content type='html'>Following &lt;a href="http://www.itnewstoday.com/?p=1032"&gt;Kubuntu development issue&lt;/a&gt;&lt;a href="http://www.itnewstoday.com/?p=1032"&gt;s&lt;/a&gt;, the wireless is the most notable issue. I had the same experience sine Kubuntu 8.10 and it almost drove me away from Kubuntu. I had to do some walk-around to make the wireless working but none of them are KDE native solution.&lt;br /&gt;&lt;br /&gt;I quite understand that it was KDE network management issue most of time, but I was just curious why nobody in KDE or Kubuntu can fix it. Until recently, I got to know it is actually the integration issue between kde network manager and kwallet, and I think it is really something Kubuntu team can improve, though I was disappointed and didn't expect it will be fixed soon.&lt;br /&gt;&lt;br /&gt;What surprised me is Kubuntu 9.10 RC (well, a few updates after RC) changes the network icon when wired network is connected as it won't show unplugged cable when connected. It really made me thinking if wireless gets improved.&lt;br /&gt;&lt;br /&gt;After a couple of minutes, I find wireless IS working, and here is my steps:&lt;br /&gt;-- sudo iwconfig eth1 essid &lt;my&gt;&lt;br /&gt;-- Wait until my network is shown in the list&lt;br /&gt;-- Click it and add a new wireless connection with keys, etc., and check " automatically connecting".&lt;br /&gt;-- When it asks "If allow KNetworkManager to access KWallet", select "&lt;span style="font-weight: bold;"&gt;Allow always&lt;/span&gt;"&lt;br /&gt;-- Then I can connect to my wireless router.&lt;br /&gt;-- After reboot, it will ask for KWallet password, and finally wireless gets connected automatically.&lt;br /&gt;&lt;br /&gt;It seems to me that "Allow always" does the trick, but maybe there are other fixs I can't see directly.&lt;br /&gt;&lt;br /&gt;Now I am wondering if fresh installed Kubuntu will do all the setup smoothly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt;&lt;/span&gt; As in Kubuntu 9.10 release notes, this is still a problem, and it suddenly doesn't work any more. I almost switched to GNOME nm-applet then I found kwallet daemon wasn't running. After I added kwalletd into auto start list, and repeated all the steps, everything works fine now.&lt;br /&gt;&lt;/my&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-730509228590721885?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/730509228590721885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2009/10/kubuntu-910-wireless.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/730509228590721885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/730509228590721885'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2009/10/kubuntu-910-wireless.html' title='Kubuntu 9.10 wireless'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-8000307016918398797</id><published>2009-10-18T12:56:00.000-07:00</published><updated>2009-10-18T13:36:13.198-07:00</updated><title type='text'>KVM isn't ready for Desktop virtualization</title><content type='html'>Given &lt;a href="http://forum.virtualbox.org/viewtopic.php?f=1&amp;amp;t=22750&amp;amp;sid=6019de39a3478734a6045df3917a940f"&gt;the bad experience of VIrtualBox 3.0.6 and 3.0.8 &lt;/a&gt;, I decided to give another shot on KVM.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I used Kubuntu 9.10 beta, and installed qemu-kvm, which is pretty much latest with version 0.11, then following &lt;a href="http://blog.bodhizazen.net/linux/convert-virtualbox-vdi-to-kvm-qcow/"&gt;this instruction&lt;/a&gt; to convert my windows VDI to KVM's qcow. And by "&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;kvm -m 512 -soundhw all -hda win.qcow&lt;/span&gt;", it boots up without any problem (well, a little problem is that windows splash screen was rendered slowly). And all the virtual hardware like audio, hard drive, ethernet, keyboard, mouse, etc. worked out of box except video card.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Video card was working but not in good shape: it is slow. Actually, it is hard to notice in normal operations until I did some media playback, which is barely usable. So I looked into kvm help and googled and tried for a few hour, I couldn't make it better with the default &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-vga curris&lt;/span&gt;. (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-vga std&lt;/span&gt; only provides 16bit color and 800X600 resolution, while &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-vga vmware&lt;/span&gt; and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-vga xenfb&lt;/span&gt; simply don't work in Windows geust) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After more searching, I finally gave up as I realized that video problem is a known issue for KVM (I guess for QEMU and Xen as well). And it seems these vitualization solution won't do much thing on this issue soon. So I have to go back to the good "old" VirtualBox and wish I can get a more usable and stable 3.X release (3.1?) soon.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-8000307016918398797?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/8000307016918398797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2009/10/kvm-isnt-ready-for-desktop.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/8000307016918398797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/8000307016918398797'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2009/10/kvm-isnt-ready-for-desktop.html' title='KVM isn&apos;t ready for Desktop virtualization'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-7026818220028352562</id><published>2009-08-17T14:38:00.000-07:00</published><updated>2009-08-17T15:09:24.574-07:00</updated><title type='text'>VirtualBox vs VirtualBox</title><content type='html'>No, you aren't looking at wrong title :-)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am comparing VBox to VBox and more precisely, one CPU to 2 virtual CPUs.&lt;/div&gt;&lt;div&gt;I heard a lot about bad performance of more than 2 virtual CPUs with VMWare. As VBox just supports multipl virtual CPUs in 3.0 release, no too many information but many are reporting instability issue with it in virtualbox.org, however most of issues are Windows guest related. I'd say dual virtual CPUs works OK with Linux guest. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Does multi-virtual-CPU improve performance? Here are the data:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_kXtvRBukDlc/SonPaRmhCfI/AAAAAAAAAC8/nkJUdxztbgw/s1600-h/1.png"&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://2.bp.blogspot.com/_kXtvRBukDlc/SonPaRmhCfI/AAAAAAAAAC8/nkJUdxztbgw/s320/1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371052080924527090" /&gt;&lt;/a&gt;In apache test, dual CPUs got ~10% improvement. And I noticed that both cores weren't in full load as one core was used 100% when single CPU test.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SonQOGe4Q6I/AAAAAAAAADE/LFOQmmLkqvQ/s1600-h/9.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SonQOGe4Q6I/AAAAAAAAADE/LFOQmmLkqvQ/s320/9.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371052971292902306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_kXtvRBukDlc/SonQS_pDOdI/AAAAAAAAADM/rVj5h4I35s8/s1600-h/10.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://2.bp.blogspot.com/_kXtvRBukDlc/SonQS_pDOdI/AAAAAAAAADM/rVj5h4I35s8/s320/10.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371053055355861458" /&gt;&lt;/a&gt;Unfortunately, IO performance dropped for ~50% with dual CPUs. Sounds like multiple virtaul CPU adding more overhead.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kXtvRBukDlc/SonQ7ZQUMzI/AAAAAAAAADc/8xY_Qts_7fY/s1600-h/19.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_kXtvRBukDlc/SonQ7ZQUMzI/AAAAAAAAADc/8xY_Qts_7fY/s320/19.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371053749426205490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_kXtvRBukDlc/SonQ4NSuEsI/AAAAAAAAADU/SoEtrf9amS4/s1600-h/20.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://2.bp.blogspot.com/_kXtvRBukDlc/SonQ4NSuEsI/AAAAAAAAADU/SoEtrf9amS4/s320/20.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371053694675456706" /&gt;&lt;/a&gt;With dual CPUs, compiling time reduces by ~25%. Again, not a lot IO/disk operation found during test. These 2 tests show that dual CPU helps building but considering IO performance drop, I doubt it gets improved in real world building.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kXtvRBukDlc/SonSDhNBBOI/AAAAAAAAAD8/DWVoM-S38So/s1600-h/13.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://3.bp.blogspot.com/_kXtvRBukDlc/SonSDhNBBOI/AAAAAAAAAD8/DWVoM-S38So/s320/13.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371054988510430434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SonR_fpzYlI/AAAAAAAAAD0/cGFjFEaFqwQ/s1600-h/12.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SonR_fpzYlI/AAAAAAAAAD0/cGFjFEaFqwQ/s320/12.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371054919374824018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kXtvRBukDlc/SonR7WWC5MI/AAAAAAAAADs/TvKevJKp6RM/s1600-h/11.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://3.bp.blogspot.com/_kXtvRBukDlc/SonR7WWC5MI/AAAAAAAAADs/TvKevJKp6RM/s320/11.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371054848156558530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kXtvRBukDlc/SonR3ql_QoI/AAAAAAAAADk/nYRBiJ-RAJc/s1600-h/6.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_kXtvRBukDlc/SonR3ql_QoI/AAAAAAAAADk/nYRBiJ-RAJc/s320/6.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371054784872661634" /&gt;&lt;/a&gt;Performance got noticable improvement with these tests but still behind native.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SonSoVx7NJI/AAAAAAAAAEU/MN0-pYWOOFc/s1600-h/2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SonSoVx7NJI/AAAAAAAAAEU/MN0-pYWOOFc/s320/2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371055621099173010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SonSjRbvRsI/AAAAAAAAAEM/kf6Rc7Ar4Y4/s1600-h/4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SonSjRbvRsI/AAAAAAAAAEM/kf6Rc7Ar4Y4/s320/4.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371055534033028802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kXtvRBukDlc/SonSgIwfmsI/AAAAAAAAAEE/2IHB6QJFTA4/s1600-h/18.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://3.bp.blogspot.com/_kXtvRBukDlc/SonSgIwfmsI/AAAAAAAAAEE/2IHB6QJFTA4/s320/18.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5371055480164555458" /&gt;&lt;/a&gt;Dual CPUs didn't help during these test, if not dropped a little bit.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I would stay with my good old single CPU configuration for most of my VBox guest as it is reliable. And sometimes using all physical cores in guest will slow down host and even makes it no response if heavy load task is running in guest.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To wrap up the whole benchmark thing, I did a few test with HW virtualization turned off. I did remember that VMWare engieer worte an essay saying software virtualization is faster than HW peer and it was backed by help document in previous VBox releases. Now, it is NOT the case as test result shows their performance are comparable if not the same, so I won't upload the diagrams to save space :-)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-7026818220028352562?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/7026818220028352562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2009/08/virtualbox-vs-virtualbox.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7026818220028352562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7026818220028352562'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2009/08/virtualbox-vs-virtualbox.html' title='VirtualBox vs VirtualBox'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_kXtvRBukDlc/SonPaRmhCfI/AAAAAAAAAC8/nkJUdxztbgw/s72-c/1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-6366163456496189021</id><published>2009-08-14T14:07:00.000-07:00</published><updated>2009-08-17T15:10:01.518-07:00</updated><title type='text'>VirtualBox vs VMware server (vs KVM)</title><content type='html'>Running the benchmark became a very tedious job as it took hours to finish. Furthermore, KVM isn't stable enough to finish Linux installation and benchmarking! Although I managed to installed Ubuntu as guest OS in KVM, I am unable to get a full set of performance data.&lt;br /&gt;BTW, I hate that PTS doesn't store any date until the whole test suite is finished which make it ever harder in KVM case.&lt;br /&gt;&lt;br /&gt;After all, I got something, well, only vmware server vs VBox. I have some concept about KVM in a few tests, which I will talk about in the comparison.&lt;br /&gt;&lt;br /&gt;###################################################&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hardware:&lt;/span&gt;&lt;br /&gt;Processor: AMD Athlon 64 X2 Dual Core 4000+ @ 2.10GHz (Total Cores: 2)&lt;br /&gt;Motherboard: Dell Inspiron 531s&lt;br /&gt;Chipset: nVidia MCP61&lt;br /&gt;System Memory: 1859MB&lt;br /&gt;Disk: 160GB WDC WD1600AAJS-7&lt;br /&gt;Graphics: GeForce 6150SE nForce 430 512MB (425/666MHz) (512MB?! I don't have it. The only thing I have is 256MB shared memory)&lt;br /&gt;&lt;br /&gt;This isn't an amazing computer neither does it have modern configuration. But it is the best computer I have, which is good enough for my development.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Software:&lt;/span&gt;&lt;br /&gt;Host: Ubuntu 9.04 64-bit with xfce instead of gnome&lt;br /&gt;Guest: Ubuntu 9.04 32-bit w/o GUI running on single CPU, no guest-addon installed. HW virtualization turned on.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Virtualization software:&lt;/span&gt;&lt;br /&gt;VirtualBox 3.0.4 64-bit for Linux&lt;br /&gt;VMWare server 2.0.1 64-bit for Linux&lt;br /&gt;KVM 84 (coming with Ubuntu 9.04)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Benchmark software:&lt;/span&gt;&lt;br /&gt;Phoronix Test Suite 2.0&lt;br /&gt;Test suite: based on linux-system but a few "duplicated" tests removed to save time&lt;br /&gt;&lt;br /&gt;###################################################&lt;br /&gt;Note: Native banchmarking is just for reference because it has 2 cores available.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXXlBZL5OI/AAAAAAAAAAk/LnC6SOqT5i0/s1600-h/1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXXlBZL5OI/AAAAAAAAAAk/LnC6SOqT5i0/s320/1.png" alt="" id="BLOGGER_PHOTO_ID_5369935161738388706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Clearly, VMWare guest is 2 times faster. Actually, KVM is faster than VWare.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXZ361NgZI/AAAAAAAAABU/WwwBsSLzAnM/s1600-h/9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXZ361NgZI/AAAAAAAAABU/WwwBsSLzAnM/s320/9.png" alt="" id="BLOGGER_PHOTO_ID_5369937685417656722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXaBjeZgsI/AAAAAAAAABc/CzJh48vIbYA/s1600-h/10.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXaBjeZgsI/AAAAAAAAABc/CzJh48vIbYA/s320/10.png" alt="" id="BLOGGER_PHOTO_ID_5369937850946650818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;VBox guest threaded IO write is slower than VMware one but read is much faster than VMWare guest in thread IO read.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXbsKv5iLI/AAAAAAAAAC0/IEjfMXSzEeU/s1600-h/20.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXbsKv5iLI/AAAAAAAAAC0/IEjfMXSzEeU/s320/20.png" alt="" id="BLOGGER_PHOTO_ID_5369939682555168946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXblhIWleI/AAAAAAAAACs/d7EkEN93Ttc/s1600-h/19.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXblhIWleI/AAAAAAAAACs/d7EkEN93Ttc/s320/19.png" alt="" id="BLOGGER_PHOTO_ID_5369939568304231906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Vbox guest doesn't do well in compiling comparing to VMWare, the most important thing I care about. However, they both suck comparing to native. This explains that I saw big performance drop when building in guest OS at work.&lt;br /&gt;I managed to get KVM finishing this test for a couple of times. The performance is comparable and seems KVM is the fastest one though still slower than native.&lt;br /&gt;I am not sure if parallel building involved in these tests. I will figure out later.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXZR54B4vI/AAAAAAAAABE/lXj7Dsr7bEw/s1600-h/6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXZR54B4vI/AAAAAAAAABE/lXj7Dsr7bEw/s320/6.png" alt="" id="BLOGGER_PHOTO_ID_5369937032326013682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXZq7NJUjI/AAAAAAAAABM/Hj1vBTEi2zY/s1600-h/8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXZq7NJUjI/AAAAAAAAABM/Hj1vBTEi2zY/s320/8.png" alt="" id="BLOGGER_PHOTO_ID_5369937462179746354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXaNmpuKkI/AAAAAAAAABk/GtKaaet-pV0/s1600-h/11.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_kXtvRBukDlc/SoXaNmpuKkI/AAAAAAAAABk/GtKaaet-pV0/s320/11.png" alt="" id="BLOGGER_PHOTO_ID_5369938057957878338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXah2J-lII/AAAAAAAAAB0/7YlsO5ElUE0/s1600-h/12.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXah2J-lII/AAAAAAAAAB0/7YlsO5ElUE0/s320/12.png" alt="" id="BLOGGER_PHOTO_ID_5369938405717087362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_kXtvRBukDlc/SoXas0yTTyI/AAAAAAAAAB8/kRi_FZ4KOC4/s1600-h/13.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://2.bp.blogspot.com/_kXtvRBukDlc/SoXas0yTTyI/AAAAAAAAAB8/kRi_FZ4KOC4/s320/13.png" alt="" id="BLOGGER_PHOTO_ID_5369938594327908130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXa2OjTjwI/AAAAAAAAACE/N9isUxK2pGw/s1600-h/14.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXa2OjTjwI/AAAAAAAAACE/N9isUxK2pGw/s320/14.png" alt="" id="BLOGGER_PHOTO_ID_5369938755863154434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In previous 6 tests, VBox is sightly faster than VMWare and both of them are behind native probably because of dual core.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXbfzWw4rI/AAAAAAAAACk/J3HIJYinEdc/s1600-h/18.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXbfzWw4rI/AAAAAAAAACk/J3HIJYinEdc/s320/18.png" alt="" id="BLOGGER_PHOTO_ID_5369939470117298866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXY9IGtzQI/AAAAAAAAAA8/wkod71BDFYE/s1600-h/4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXY9IGtzQI/AAAAAAAAAA8/wkod71BDFYE/s320/4.png" alt="" id="BLOGGER_PHOTO_ID_5369936675368455426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXYd6c8juI/AAAAAAAAAAs/tZjNIUqTJKw/s1600-h/2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://3.bp.blogspot.com/_kXtvRBukDlc/SoXYd6c8juI/AAAAAAAAAAs/tZjNIUqTJKw/s320/2.png" alt="" id="BLOGGER_PHOTO_ID_5369936139127656162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXYtgRvrcI/AAAAAAAAAA0/zRqdagki1Mk/s1600-h/3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXYtgRvrcI/AAAAAAAAAA0/zRqdagki1Mk/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5369936406979259842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXa-7NaicI/AAAAAAAAACM/o4FuTmHVYDI/s1600-h/15.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXa-7NaicI/AAAAAAAAACM/o4FuTmHVYDI/s320/15.png" alt="" id="BLOGGER_PHOTO_ID_5369938905289886146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXbGGphQYI/AAAAAAAAACU/n65k3iqwAyY/s1600-h/16.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_kXtvRBukDlc/SoXbGGphQYI/AAAAAAAAACU/n65k3iqwAyY/s320/16.png" alt="" id="BLOGGER_PHOTO_ID_5369939028619641218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_kXtvRBukDlc/SoXbORctZ5I/AAAAAAAAACc/gokcI4umyFU/s1600-h/17.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://2.bp.blogspot.com/_kXtvRBukDlc/SoXbORctZ5I/AAAAAAAAACc/gokcI4umyFU/s320/17.png" alt="" id="BLOGGER_PHOTO_ID_5369939168957654930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In the rest tests, VBox keeps a close leading over VMWare and they are both close to native performance.&lt;br /&gt;&lt;br /&gt;Overall, Guests OS under VirtualBox and VMWare have similar performance with exceptions of apache and compiling, which VBox really need improvment.&lt;br /&gt;Both need to improve IO performance too.&lt;br /&gt;Another thing need to point out is that I noticed that VBox NAT performance is worse the VMWare but both of them are behind KVM which has near-native network throughput when installation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-6366163456496189021?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/6366163456496189021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2009/08/virtualbox-vs-vmware-server-vs-kvm-part.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/6366163456496189021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/6366163456496189021'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2009/08/virtualbox-vs-vmware-server-vs-kvm-part.html' title='VirtualBox vs VMware server (vs KVM)'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_kXtvRBukDlc/SoXXlBZL5OI/AAAAAAAAAAk/LnC6SOqT5i0/s72-c/1.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-7717989065341678431</id><published>2009-08-11T12:42:00.000-07:00</published><updated>2009-08-12T22:54:46.659-07:00</updated><title type='text'>VirtualBox vs VMware server vs KVM -- Background</title><content type='html'>I have been doing Linux development for quite a few years and starting from my current job, I work on Linux platform full-time. But ironically, I have to use Windows PC at work while all of my development are linux related (Frankly all I need for Windows is just outlook. Some other tools provided by company are windows only while I barely touch them).&lt;br /&gt;&lt;br /&gt;The same thing happens to every colleagues of mine. Then virtual machine was introduced. Just like RedHat/Fedora is mostly used at work because of its previous popularity, vmware is used widely too, first vmware player then vmware server. I don't like vmware player as it is too limited, such as no VM creation is allowed (though workaround exists). And vmware server was the only one I used a few years ago, until I knew VirtualBox.&lt;br /&gt;&lt;br /&gt;At that time, I immediately left vmware and went for VBox for its simplicity, performance, and open source. I didn't bother to benchmark VBox 1.x and vmware server 1.0 then since vmware was way far slower. And this was the reason I introduced VBox to my colleagues at my current job.&lt;br /&gt;&lt;br /&gt;It's been while since then and now we have KVM and VBox grows to 3.0. Given the fact that some of my friends are still using vmware server 2.0 now, I have been curious how they run now so that I decided to do benchmark and comparison. And finally I find some time.&lt;br /&gt;&lt;br /&gt;I am not going to do unbiased comparison as I will stick to VBox whatever result I get from this and possibly move to KVM on Linux host because Oracle-SUN acquisition brings uncertainty to VBox's future. Vmware server 2.0 is much faster as I can tell right now and much more bloated as well. I really don't get how it becomes ~500MB installation tarball, ~700MB installation and uses more resource to just provide a web server and web interface. Every time I try to install and run vmware server, what I am thinking at the same time is how soon I can get rid of it. Furthermore, it won't run on slower(Pentium 4) and less RAM(1GB) PC anymore.&lt;br /&gt;&lt;br /&gt;In another hand, it won't be a fair comparison anyway as target of each are different: VBox for desktop virtualization, vmware server for server and KVM is kinda for server.&lt;br /&gt;&lt;br /&gt;The benchmark tools I am going to use is Phoronix Test Suite 2.0. And It isn't a perfect tool either. It is hard to reach scientific conclusion from the result as the tests ain't organized well and some critical tests are missing such as network benchmark. However it can still give an overview of how a Linux system runs.&lt;br /&gt;&lt;br /&gt;OK. Let's cut the crap and press the start button ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-7717989065341678431?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/7717989065341678431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2009/08/virtualbox-vs-vmware-server-vs-kvm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7717989065341678431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/7717989065341678431'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2009/08/virtualbox-vs-vmware-server-vs-kvm.html' title='VirtualBox vs VMware server vs KVM -- Background'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-344963309256765282.post-2210615614240904598</id><published>2009-07-18T21:06:00.000-07:00</published><updated>2009-07-18T21:09:37.276-07:00</updated><title type='text'>Linux usage (part 1) - CLI basics</title><content type='html'>Command line interface as the primary interface to Linux is still important though GUI tools can do more and more and seems it is going to replace command line like Windows. Ironically, Microsoft noticeably emphasizes command line tools since Vista, which in turn proves that command line interface can not be totally replaced.&lt;br /&gt;&lt;br /&gt;One advantage of CLI is remote accessing. You will found ssh/telnet/ftp is more usable in narrow band connection than other GUI tools especially remote desktop.&lt;br /&gt;&lt;br /&gt;However, CLI can't do everything effectively. One example is web browsing. By using Lynx, you will never actually browse internet as you need and nowadays people can not live with internet connection without browsing web pages.&lt;br /&gt;&lt;br /&gt;The first thing to understand CLI is the shell you are actually interacting with. BASH as default shell for Linux will be covered below while a lot of others is out there.&lt;br /&gt;&lt;br /&gt;http://free-electrons.com/doc/command_memento.odt is the best summary of commands I ever found. And it can be used as a reference card too.&lt;br /&gt;&lt;br /&gt;Notes to it:&lt;br /&gt;-- Get all environment settings:&lt;br /&gt; env&lt;br /&gt;-- Set an environment variable&lt;br /&gt; export =&lt;br /&gt; example: export LD_LABRARY_PATH=$LD_LABRARY_PATH:/local/bin&lt;br /&gt;-- Symbolic link (called as soft link too)&lt;br /&gt; It is best way to used symbolic link to make a copy of a file in different directories and keep them synchronized all the time.&lt;br /&gt; More word: making a symbolic link doesn't make a copy of source. Somewhat it is like shortcut in Windows but it is much more powerful than shortcut because of the good of Linux file system.&lt;br /&gt;-- rm -fr&lt;br /&gt; Be very carefule of rm -fr because it deletes everything under the directory specified without mercy and possibility to restore!&lt;br /&gt;-- filtering&lt;br /&gt; Linux command supporting pipe by using "|".So we can do filtering like "ls -a | grep Vb" to show the line with Vb only.&lt;br /&gt;-- Mount&lt;br /&gt; You can even mount an ISO file.&lt;br /&gt; For example: mount -o loop -t iso9660 file.iso /mnt/test&lt;br /&gt; -- /mnt/test has to be created before&lt;br /&gt; -- /mnt is usually used as base directory of all mounted file system. In new Linux distribution, /media is used as base to mount auto-mounted file system and removable media file system like USB key.&lt;br /&gt; -- /etc/fstab is used to define auto-mounted file systems&lt;br /&gt; -- Do umount before removing a key physically. However, some distribution supports GUI tool to "safely remove" it just like Windows.&lt;br /&gt;-- Access CLI/Terminal&lt;br /&gt; In GUI desktop:&lt;br /&gt; GNOME -- Application-&gt;Accessories-&gt;Terminal&lt;br /&gt; KDE -- K-&gt;System-&gt;Terminal&lt;br /&gt; From anywhere:&lt;br /&gt; Ctrl+Alt+Fn (Fn is F1 ~ F6 depending on how many terminals are enabled at startup)&lt;br /&gt; You can go to X windows(GUI) by Ctrl+Alt+F7&lt;br /&gt; Note that in this way, the terminal is realone than terminal in GUI desktop. For example, when a driver prints some message, it won't go directly to terminal in desktop, but it does here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/344963309256765282-2210615614240904598?l=ezjd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ezjd.blogspot.com/feeds/2210615614240904598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ezjd.blogspot.com/2009/07/linux-usage-part-1-cli-basics.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/2210615614240904598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/344963309256765282/posts/default/2210615614240904598'/><link rel='alternate' type='text/html' href='http://ezjd.blogspot.com/2009/07/linux-usage-part-1-cli-basics.html' title='Linux usage (part 1) - CLI basics'/><author><name>ezjd</name><uri>http://www.blogger.com/profile/14227246120897691603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
