Search Results: "ag"

14 January 2011

Jordi Mallach: New project to discuss

Reading Scott's recent announcement on his move to Google was both surprising and a pleasure. Surprising, because it'll take time to stop associating his name to Ubuntu, Canonical, and the nice experiences I had while I worked with them. A pleasure, because his blog post was full of reminiscences of the very early days of a project that ended up being way more successful in just a few years than probably anyone in the Oxford conference could imagine. Scott, best of luck for this new adventure! Scott's write-up includes a sentence that made me remember I had been wanting to write a blog post related to all of this, but was pending Mark Shuttleworth's permission for posting:
Ok, Mark wasn t really a Nigerian 419 scammer, but some people did discard his e-mail as spam! Scott James Remnant
Many know the story of how I ended not being part of the Super-Secret-Debian-Startup Scott mentions. I even wrote about it in a blog post, 3 years ago:
[...] nothing beats the next email which sat for some dramatic 6 months in my messy inbox until I found out in the worst of the possible scenarios. Let's go back to late February, 2004, when I had no job, and I didn't have a clue on what to do with my life.
From: Mark Shuttleworth <mark@hbd.com>
Subject: New project to discuss
To: Jordi Mallach <jordi@debian.org>
Date: Sun, 29 Feb 2004 18:33:51 +0000
[...]
I'm hiring a team of debian developers to work full time on a new
distribution based on Debian. We're making internationalisation a prime
focus, together with Python and regular release management. I've discussed
it with a number of Debian leaders and they're all very positive about it.
[...]
I'm not sure if I totally missed it as it came in, or I skimmed through it and thought WTF?! Dude on crack or I just forgot I need to reply to this email , but I'd swear it was the former. Not long after, no-name-yet.com popped up, the rumours started spreading around Debian channels. Luckily, I got a job at LliureX two months later, where I worked during the following 2 years, but that's another story. I guess it was July or so when Ubuntu was made public, and Mark and his secret team organised a conference (blog entries [1] [2] [3] [4] [5]), just before the Warty release, and I was invited to it, for the same reasons I got that email. During that conference, probably because Mark sent me some email and I applied a filter to get to it, I found the lost email, and felt like digging a hole to hide for a LONG while. I couldn't believe the incredible opportunity I had missed. I went to Mark and said "hey, you're not going to believe this", and he did look quite surprised about someone being such an idiot. I wonder if I should reply to his email today...
When the usual suspects in the secret Spanish Debian Cabal channel read this blog post, they decided Mark deserved a reply, even if it would hit his inbox more than three and a half years late. :) With great care, we crafted an email that would look genuinely stupid in late 2007, but just arrogant and idiotic in 2004, when Ubuntu was just an African word, and the GNU/Linux distribution landscape was quickly evolving at the time, Gentoo Linux had the posh distribution crown, that Debian had held for quite a few years. I even took enough care to forge the X-Operating-System and User-Agent headers so they matched whatever was current in Debian in February 2004, and of course, top-posting seemed most appropriate. So Mark woke up that Monday, fired up his email client, and got... this:
Date: Mon, 1 Mar 2004 09:47:55 +0100
From: Jordi Mallach <jordi@sindominio.net>
To: Mark Shuttleworth <mark@hbd.com>
Subject: Re: New project to discuss
Organization: SinDominio
X-Operating-System: Debian GNU/Linux sid (Linux 2.6.3 i686)
User-Agent: Mutt/1.5.5.1+cvs20040105i
Hi Mark,
Thanks for your email. I nearly deleted this e-mail because for some
reason I thought it was targetted spam.
Your project looks very interesting, almost like a dream come true.
However, I feel a bit uneasy about your proposal. Something just doesn't
fit.
Why would someone start a company to work on /yet another/ Debian
derivative? Have you heard about Progeny's sad story? I think it's a
great example to show that Debian users don't want Debian-based distros,
they want people to work on the "real thing". Besides, I don't think
there's much more place for successful commercial distros, with Red Hat
and SuSE having well-established niches in the US and Europe.
Also, why focus on Debian specifically, Why not, for example, Gentoo,
which has a lot of buzz these days, and looks poised to be the next big
distribution?
To be honest, I think only a few people have the stamina or financial
stability to undertake a project like this, so I'd like to know
a bit more about you, and details on how you plan to sustain the
expenses.
Those are the main issues that worry me about your project. Other than
that, I would be interested in taking part in it, as I'm currently
unemployed and working on something Debian-based would be just too good
to miss.
You can reach me at +34 123 45 67 89, or if you feel like flying people
around Europe, I probably can be in the UK whenever it fits you.
Thanks, and hoping to hear from you again,
Jordi
On Sun, Feb 29, 2004 at 06:33:51PM +0000, Mark Shuttleworth wrote:
> Hi Jordi
>
> We haven't met, but both Jeff Waugh and Martin Michelmayr recommended that
> I get in touch with you in connection with a new project that I'm starting.
>
> I'm hiring a team of debian developers to work full time on a new
> distribution based on Debian. We're making internationalisation a prime
> focus, together with Python and regular release management. I've discussed
> it with a number of Debian leaders and they're all very positive about it.
>
> Would you be available to discuss it by telephone? I'm in the UK, so we
> could probably find a good timezoine easily enough ;-) Let me knof if
> you're keen to discuss it, when and what number to call.
>
> Cheers,
> Mark
>
> --
> Try Debian GNU/Linux. Software freedom for the bold, at www.debian.org
> http://www.markshuttleworth.com/
As you can imagine, his reaction was immediate:
Date: Mon, 22 Oct 2007 11:13:54 +0100
From: Mark Shuttleworth <mark@hbd.com>
To: Jordi Mallach <jordi@sindominio.net>
Subject: Re: New project to discuss
Jordi! I just got this now! Did you recently flush an old mail queue?
With thanks to all the Spanish Cabal members who were involved!

Jo Shields: The phantom fifth freedom

Not for the first time, I ve seen the suggestion in the echo chamber that Mono packages should be moved from Debian into the non-free repository, which is not formally part of Debian. The reason, as it so often is, is patents specifically this time, the searing risk posed to Debian and its users that Mono s packaging does not (and technically could not without forking from upstream) provide base class libraries which implement only the content of ECMA-335 4th Edition. As I understand it, this implies three things about the suggestion/demand: firstly, that the individual in question believes that Mono end users are at risk from patent litigation from Microsoft Corp because Mono s implementation of Microsoft.NET beyond the content of ECMA 334/335 infringes on Microsoft patents; secondly, that the Microsoft Community Promise which promises not to assert legal claims over third party implementations of ECMA-335 4th Edition (and ECMA-334 4th Edition which defines the C# language) would render a pure ECMA-only runtime safe if it existed (which it does not); thirdly that without the protection offered by the Microsoft Community Promise, the source code licenses of Mono are irrelevant the patent risk renders the software non-Free. It appears, unfortunately, that the community of Free Software Advocates don t actually understand what Free Software actually IS. That explains an awful lot, but should surprise nobody. So here s a lesson on what, exactly, is being advocated for. The Free Software Foundation defines four Software Freedoms these are the minimum criteria required for something to be considered Free Software by the FSF: Other groups have their own variants on these, but those are really just clarifications on the FSF definition - for example, the Debian Free Software Guidelines mostly line up, but have some additional clauses such as clause 4 which allows software to be considered Free if source code may be redistributed without modifications, as long as patches may be shipped alongside. These four freedoms are offered to you by the software s copyright holders only, and apply regardless of their choice of license any Free license, from a lengthy legal tome like the MPL to the completely-Free WTFPL, will offer you these four basic freedoms as a minimum, and any additional clauses in their licenses cannot seek to restrict these freedoms. These four freedoms represent the beginning, and end, of whether a piece of software is Free or not. Software does not need to be developed in the open, in a community-responsive way, in order to qualify as Free projects such as Google s Android, which are developed under a throw a final release over the wall, bugs and all, and expect people to thank you for it model, are still free, even if contribution is difficult. Actually, on a related note, software does not need to solicit upstream contribution of any kind in order to qualify as Free as long as you personally can redistribute the code with changes, then that s enough. Software does not need to serve a fully or even partially legal purpose in order to qualify as Free the favoured tool for causing distributed denial of service attacks, Low Orbit Ion Cannon, is Free Software, even though realistically it serves no legal purpose. DeCSS, the code initially used to allow DVD media to play on Linux (by breaking the CSS encryption mechanism) is Free Software. Software does not need to be useful or tasteful in order to qualify as Free the Last Measure Operating System, a minimalist OS primarily designed to loudly display the famous shock site images from goatse and related, is Free Software. Even in somewhat less clear-cut cases of taste, your personal opinion of software has no bearing on whether it is Free Software, as long as the four freedoms are guaranteed by the author(s). Software does not need to have only Free dependencies to qualify as Free Software it is entirely permissible to write software which relies upon a non-Free framework or library, and release your code under a Free license. It is the downstream recipient s problem to provide the dependencies, including their choice to craft a Free replacement for any non-Free code you make use of. Debian has a special repository called contrib, where Free software which only works with non-Free data, lives for example, Free game engines which require the insertion of proprietary game data in order to operate. You could write Free addons for expensive proprietary software such as Matlab, and as long as your code is Free, your responsibilities are met. Software does not need to avoid patents software, algorithmic, or otherwise in order to qualify as Free. The Freetype font library was still entirely Free Software when Apple were slinging threats around regarding font hinting data. FFmpeg, the Swiss Army knife of media codec libraries, is Free Software regardless of the number of codec patents it breaks. Software does not need any third party approval to be Free Software the rights of Free Software can only be offered by the copyright holders, and the opinion of third parties is an irrelevance as to whether software is Free. The GPL d clone of Blizzard Entertainment s Battle.net servers, bnetd, is Free Software, regardless of legal takedown notices. Third parties cannot influence whether or not a piece of software is Free. They can influence tangentially related topics, such as whether the software can be legally used, but that s the limit. And even within a given piece of software, where copyright is shared by contributors, the author of one component has no say on other components. And you can t make code which is already released as Free, suddenly un-Free you can, if you hold all the copyrights, close up future versions, but your existing code remains Free forever. Reasonably, you can opt to avoid using a piece of software because you have requirements beyond it merely being Free Software Cdrtools has been avoided in Debian for a long time due to the upstream author s legal threats and rambling but that is a side issue as to the question of whether or not the software is Free. Patents are simply not involved in the question of whether or not something is Free Software, except for one narrow case: where Free Software is released by somebody who also holds related patents, and uses a license such as Ms-PL or Apache 2.0 or GPLv3 which requires them to also release those patents to those using/distributing the software. Outside that narrow situation, patents do not relate to the question of whether something is Free Software even if a company releases some source code under a license like BSD then demands patent fees from end users. So, on to the original topic of Mono. Every piece of Mono s source code is released by its authors under a license which guarantees the FSF s Four Freedoms. Whether or not you find Mono useful or tasteful does not affect that Free status. Whether or not Mono infringes upon any laws or patents does not affect that Free status. That Mono contains some libraries whose upstream author is Microsoft does not give Microsoft even the remotest claim to a single line of code outside the code they wrote and even then, it wouldn t be an issue, since the licenses they use are Free. In fact, both the licenses used in the Microsoft portions of the source base make patent grants to all users, in addition to guaranteeing the FSF s Four Freedoms and any license contamination would decrease, not increase, any risk of legal attack from Microsoft. There s even plenty of Microsoft code available for re-use at a lower level than the currently re-used libraries: The Microsoft.NET Micro Framework (for use on embedded platforms direct to the metal) is under the Free Software Apache 2.0 license, and would provide access to some of Microsoft s runtime and class library code, complete with a patent grant, if it were desired. Please try to keep your thought processes straight. If you want to argue that you re all for Free Software, please remember that there s plenty of Free Software you might not approve of and don t claim to be a Free Software advocate then use bogus arguments to claim that Free Software is not Free. Free Software includes LMOS and LOIC and Mono, whether you like it or not.

Alexander Reichle-Schmehl: Release Critical Bug report for Week 02

The bug webinterface of the Ultimate Debian Database currently knows about the following release critical bugs:
In Total:620
Affecting Squeeze:82
Squeeze only:36
Remaining to be fixed in Squeeze:46
Of these 46 bugs, the following tags are set:
Pending in Squeeze:4
Patched in Squeeze:9
Duplicates in Squeeze:8
Can be fixed in a security Update:1
Contrib or non-free in Squeeze:0
Claimed in Squeeze:0
Delayed in Squeeze:0
Otherwise fixed in Squeeze:8
Ignoring all the above (multiple tags possible) 20 bugs need to be fixed by Debian Contributors to get Debian 6.0 Squeeze released. However, with the view of the Release Managers, 65 need to be dealt with for the release to happen. Please see Interpreting the release critical bug statistics for an explanation of the different numbers.

Guido G nther: Using git-svn when upstream moves the subversion repository

To make xul-ext-nostalgy work with icedove 3.1 I finally wanted to update to a new upstream version. The git repository is tracking upstream's svn via git-svn which works great but when I typed
git svn rebase
I got a
Connection refused: Can't connect to host 'frisch.fr': Connection refused at /usr/lib/git-core/git-svn line 2310
The svn upstream repo moved to google code. It took me a moment to figure out that this can be fixed easily with:
 git config svn-remote.svn.url http://nostalgy.googlecode.com/svn/
 git config svn-remote.svn.rewriteRoot svn://frisch.fr/nostalgy
 git svn rebase
Just replace the url with the new svn repository url and set rewriteRoot to the old svn repository url and you're done. This blog is flattr enabled.

Mike Hommey: Changes to the Debian Mozilla team APT archive

I made some changes as to how packages from the Debian Mozilla team that can t yet be distributed in the Debian archives are distributed to users. Please update your APT sources and now use the following for 4.0 beta packages:
deb http://mozilla.debian.net/ experimental iceweasel-4.0
You ll also need the experimental repository in your sources, but the overall installation is much easier now:
# apt-get install -t experimental iceweasel
This should work for squeeze and unstable users. I also added Iceweasel 3.6 backports for Debian Lenny users. For these, add the following APT source:
deb http://mozilla.debian.net/ lenny-backports iceweasel-3.6
You ll also need the lenny-backports repository in your sources. As for the experimental packages above, installation should be as easy as:
# apt-get install -t lenny-backports iceweasel
If your APT complains about the archive key, please check the instructions to add the key to your APT keyring.

13 January 2011

Matthew Garrett: EFI implementation bugs

I'm working on improving various bits of Apple hardware support, which includes trying to make EFI booting on Macs more sensible. One of my test machines is an 11" Macbook Air, which is a beautiful piece of hardware. If you want something small and light that's approximately a proper computer rather than a netbook, there's nothing else in the x86 market to touch it. Nothing.

So it's a shame that while Apple employs hardware designers who are absolutely the best in their field, their firmware developers are utterly incompetent. The EFI spec describes a protocol called GOP (Graphics Output Protocol) which allows the operating system to find out things like the screen resolution, framebuffer location and stride. This machine kindly passes everything back correctly, except for stride being wrong. Like, utterly wrong. Implausibly wrong. Obviously, terrifyingly wrong. So wrong that if you trust it, your screen image looks like it's been involved in some sort of awful pasta making accident. But never mind, that's a single line workaround.

But there's far, far worse. EFI has three modes of operation - boot services, runtime services, and runtime services with a virtual memory map. Boot services are, as the name implies, intended to be used by the bootloader. They're contained within memory marked with a type of either BOOT_SERVICES_CODE or BOOT_SERVICES_DATA. Once the bootloader has loaded the OS, just before handing over to it, it calls ExitBootServices() and the firmware is then at liberty to clear those areas of memory. The OS never executes boot services code and can use the memory that was allocated to them.

So then we have runtime services. EFI is, depending on how you want to look at it, either saner or much less sane than traditional BIOS access. The firmware gives you a bunch of function pointers and you then simply call them with native calling convention (this, incidentally, is why it's pretty much impossible to run a 32-bit OS on 64-bit EFI, or a 64-bit OS on a 64-bit system that happens to have 32-bit EFI). To begin with the firmware assumes flat physical mapping, which isn't entirely ideal when you're an OS with virtual address space - so there's a SetVirtualAddressMap() call which lets the OS pass a memory map to the firmware, and from then on everything just works.

Except on this machine. On this machine, you call SetVirtualAddressMap() and the kernel faults because it's just tried to execute code from a region of address space that's marked as non-executable. Closer examination revealed that, yes, this area of address space is marked as RAM and so the kernel's doing the right thing. Except, obviously, the right thing generally doesn't involve crashing the machine at boot time, so there was something else up.

That something else turned out to be SetVirtualAddressMap() calling into boot services code. The boot services code that's not supposed to be touched after ExitBootServices() has been called. The boot services code that's flagged as BOOT_SERVICES_CODE and was therefore mapped as RAM by us because, well, nothing's there any more. The boot services code that we're ignoring exactly as the spec says we should.

So, a quick change to the bootloader to pass us an e820 map[1] that marks the boot services regions as reserved, a quick change to the kernel to mark BOOT_SERVICES_CODE regions as executable and we're in business. Except that when we call SetVariable() to configure the bootloader, the firmware tries to read from an address that's approximately 54TB above anything else.

BlApple.

[1] Oh, yes, despite E820 being an x86 BIOS-specific thing, we use it for the in-kernel representation of the address map under EFI as well. So despite the EFI memory map being available to the kernel, the bootloader has to construct something that looks like an E820 map, losing information in the process. So even though it's been given the E820 map, the kernel has to look through the EFI memory map in order to find the EFI runtime services section in order to mark it executable. This is, arguably, insane, but so is the entirety of EFI so that's ok then.

Cyril Brulebois: X11R7.6: Katamari summary

X11R7.6 got released on the 20th of December 2010. There were several status updates about XServer 1.9 in experimental on this blog previously, but here s a more thorough review of this katamari. Terminology: that s how upstream calls a badged annual rollup release. In other words, the server, drivers, client libraries, protocols, fonts, and basic applications are all individually released, and a rollup of all those is released from time to time, with a version for all of those components. The term comes from a series of video games. (Explanations taken from a message by Alan Coopersmith.) Katamaris are released with a consolidated changelog, where all components and versions are listed. There s also a git shortlog available for each component, pointing back to freedesktop s git web interface for each and every commit. I modified the table of versions to get the following table, dropping the X11R7.5 column, and adding a distribution one, so as to mention where each component for X11R7.6 can be found. It boils down mostly to: So there s the summary:
Type Component Version Distribution
xserver 1.9.3 experimental
app bdftopcf 1.0.3 unstable
app iceauth 1.0.4 experimental
app luit 1.1.0 experimental
app mkfontdir 1.0.6 unstable
app mkfontscale 1.0.8 unstable
app sessreg 1.0.6 unstable
app setxkbmap 1.2.0 experimental
app smproxy 1.0.4 experimental
app x11perf 1.5.2 experimental
app xauth 1.0.5 unstable
app xbacklight 1.1.2 will be dropped
app xcmsdb 1.0.3 experimental
app xcursorgen 1.0.4 experimental
app xdpyinfo 1.2.0 experimental
app xdriinfo 1.0.4 experimental
app xev 1.1.0 experimental
app xgamma 1.0.4 experimental
app xhost 1.0.4 experimental
app xinput 1.5.3 unstable
app xkbcomp 1.2.0 experimental
app xkbevd 1.1.2 experimental
app xkbutils 1.0.3 experimental
app xkill 1.0.3 experimental
app xlsatoms 1.1.0 unstable
app xlsclients 1.1.1 experimental
app xmodmap 1.0.5 experimental
app xpr 1.0.3 will be dropped
app xprop 1.2.0 experimental
app xrandr 1.3.4 experimental
app xrdb 1.0.7 experimental
app xrefresh 1.0.4 experimental
app xset 1.2.1 experimental
app xsetroot 1.1.0 experimental
app xvinfo 1.1.1 experimental
app xwd 1.0.4 experimental
app xwininfo 1.1.1 experimental
app xwud 1.0.3 experimental
data bitmaps 1.1.1 unstable
data cursors 1.0.3 unstable
doc xorg-docs 1.6 unstable
doc xorg-sgml-doctools 1.6 unstable
driver xf86-input-acecad 1.4.0 experimental
driver xf86-input-aiptek 1.3.1 experimental
driver xf86-input-evdev 2.5.0 experimental
driver xf86-input-joystick 1.5.0 experimental
driver xf86-input-keyboard 1.5.0 experimental
driver xf86-input-mouse 1.6.0 experimental
driver xf86-input-synaptics 1.3.0 experimental
driver xf86-input-vmmouse 12.6.10 experimental
driver xf86-input-void 1.3.1 experimental
driver xf86-video-apm 1.2.3 experimental
driver xf86-video-ark 0.7.3 experimental
driver xf86-video-ast 0.91.10 dropped
driver xf86-video-ati 6.13.2 experimental
driver xf86-video-chips 1.2.3 experimental
driver xf86-video-cirrus 1.3.2 experimental
driver xf86-video-dummy 0.3.4 experimental
driver xf86-video-fbdev 0.4.2 experimental
driver xf86-video-geode 2.11.10 todo: needs upload
driver xf86-video-glide 1.1.0 experimental
driver xf86-video-glint 1.2.5 experimental
driver xf86-video-i128 1.3.4 experimental
driver xf86-video-i740 1.3.2 experimental
driver xf86-video-intel 2.13.0 experimental
driver xf86-video-mach64 6.8.2 experimental
driver xf86-video-mga 1.4.13 experimental
driver xf86-video-neomagic 1.2.5 experimental
driver xf86-video-newport 0.2.3 todo: needs upload
driver xf86-video-nv 2.1.18 will be dropped
driver xf86-video-r128 6.8.1 experimental
driver xf86-video-rendition 4.2.4 experimental
driver xf86-video-s3 0.6.3 experimental
driver xf86-video-s3virge 1.10.4 experimental
driver xf86-video-savage 2.3.1 experimental
driver xf86-video-siliconmotion 1.7.4 experimental
driver xf86-video-sis 0.10.3 experimental
driver xf86-video-sisusb 0.9.4 experimental
driver xf86-video-suncg14 1.1.1 experimental
driver xf86-video-suncg3 1.1.1 experimental
driver xf86-video-suncg6 1.1.1 experimental
driver xf86-video-sunffb 1.2.1 experimental
driver xf86-video-sunleo 1.2.0 experimental
driver xf86-video-suntcx 1.1.1 experimental
driver xf86-video-tdfx 1.4.3 experimental
driver xf86-video-tga 1.2.1 experimental
driver xf86-video-trident 1.3.4 experimental
driver xf86-video-tseng 1.2.4 experimental
driver xf86-video-v4l 0.2.0 dropped
driver xf86-video-vesa 2.3.0 experimental
driver xf86-video-vmware 11.0.3 experimental
driver xf86-video-voodoo 1.2.4 experimental
driver xf86-video-wsfb 0.3.0 dropped
driver xf86-video-xgi 1.6.0 dropped
driver xf86-video-xgixp 1.8.0 dropped
font fonts skipped
lib libAppleWM 1.4.0 not for us
lib libFS 1.0.3 unstable
lib libICE 1.0.7 unstable
lib libSM 1.2.0 unstable
lib libWindowsWM 1.0.1 not for us
lib libX11 1.4.0 experimental
lib libXScrnSaver 1.2.1 unstable
lib libXau 1.0.6 unstable
lib libXaw 1.0.8 unstable
lib libXcomposite 0.4.3 unstable
lib libXcursor 1.1.11 unstable
lib libXdamage 1.1.3 unstable
lib libXdmcp 1.1.0 unstable
lib libXext 1.2.0 experimental
lib libXfixes 4.0.5 unstable
lib libXfont 1.4.3 experimental
lib libXft 2.2.0 experimental
lib libXi 1.4.0 experimental
lib libXinerama 1.1.1 unstable
lib libXmu 1.1.0 unstable
lib libXpm 3.5.9 unstable
lib libXrandr 1.3.1 unstable
lib libXrender 0.9.6 unstable
lib libXRes 1.0.5 unstable
lib libXt 1.0.9 experimental
lib libXtst 1.2.0 unstable
lib libXv 1.0.6 unstable
lib libXvMC 1.0.6 unstable
lib libXxf86dga 1.1.2 unstable
lib libXxf86vm 1.1.1 unstable
lib libdmx 1.1.1 unstable
lib libfontenc 1.1.0 unstable
lib libpciaccess 0.12.0 unstable
lib libxkbfile 1.0.7 unstable
lib libxtrans 1.2.6 unstable
proto applewmproto 1.4.1 not for us
proto bigreqsproto 1.1.1 unstable
proto compositeproto 0.4.2 unstable
proto damageproto 1.2.1 unstable
proto dmxproto 2.3 unstable
proto dri2proto 2.3 unstable
proto fixesproto 4.1.2 unstable
proto fontsproto 2.1.1 unstable
proto glproto 1.4.12 unstable
proto inputproto 2.0.1 unstable
proto kbproto 1.0.5 unstable
proto randrproto 1.3.2 unstable
proto recordproto 1.14.1 unstable
proto renderproto 0.11.1 unstable
proto resourceproto 1.1.1 unstable
proto scrnsaverproto 1.2.1 unstable
proto videoproto 2.3.1 unstable
proto windowswmproto 1.0.4 not for us
proto xcmiscproto 1.2.1 unstable
proto xextproto 7.1.2 unstable
proto xf86bigfontproto 1.2.0 unstable
proto xf86dgaproto 2.1 unstable
proto xf86driproto 2.1.0 unstable
proto xf86vidmodeproto 2.3 unstable
proto xineramaproto 1.2 unstable
proto x11proto 7.0.20 unstable
util makedepend 1.0.3 unstable
util macros 1.11.0 unstable
xcb pthread-stubs 0.3 unstable
xcb libxcb 1.7 experimental
xcb proto 1.6 unstable

Jonathan Wiltshire: RCBW, week fourish.

Just one this week: #609304 (pimd): backport the unstable fix for testing-proposed-updates (which nearly gave me heart failure when it FTBFS on mipsel, but it was an unrelated problem).
Comments flattr this!

Michal &#268;iha&#345;: How good is phpMyAdmin translation to your language?

phpMyAdmin 3.4 is about to be released in something like two months (we want next beta to ship with brand new theme) and there is still plenty of translations to do. You still have lot of time to translate, but there is also lot of work to do. And I'm pretty sure there are some Slovak, German or Italian speaking readers of this blog. So what are you waiting for? :-)

Filed under: English Phpmyadmin 0 comments Flattr this!

Dominique Dumont: Debian copyright DEP5 parser/editor/validator/migrator is released

Hello The new version of libconfig-model-perl 1.229 is now available in Debian/Sid. This new version provides a model of Debian s DEP-5 copyright file specification updated according to the CANDIDATE version. (Among other features, like editor/validator for debian/control). The DEP-5 editor must be run in the source package directory (I ll provide an example below) with the following command:
config-edit -application dpkg-copyright
Features: Known issues: Example: The copyright file of libconfig-model-backend-augeas-perl needs to be updated: Here s the original copyright file (slightly edited to protect my mail box and save electrons) :
$ cat debian/copyright
Format-Specification: http://wiki.debian.org/Proposals/CopyrightFormat?action=recall&rev=196 Upstream-Maintainer: Dominique Dumont (ddumont at cpan.org)
Upstream-Source: http://search.cpan.org/dist/Config-Model-Backend-Augeas/
Upstream-Name: Config-Model-Backend-Augeas Copyright: 2008-2009, Dominique Dumont (ddumont at cpan.org)
License: LGPL-2+ Files: debian/*
Copyright: 2009, Dominique Dumont
License: LGPL-2+ License: LGPL-2+
This program is free software; you can redistribute it and/or
[snip]
First, let s just check issues:
$ config-edit -application dpkg-copyright -ui none
Element Upstream-Maintainer of node Debian::Dpkg::Copyright is deprecated
Element Upstream-Source of node Debian::Dpkg::Copyright is deprecated
Element Upstream-Name of node Debian::Dpkg::Copyright is deprecated
Missing Files: specification at top of section number 2. Adding Files: * spec
Then, let s see what s config-edit can fix all by itself:
$ config-edit -application dpkg-copyright -ui none -save
[ same warnings displayed ]
Let s check the result of the migration:
$ config-edit -application dpkg-copyright -ui none
[ good: no more warnings ]
And here s the content of the upgraded file (drum rolls, please):
$ cat debian/copyright
Format: http://dep.debian.net/deps/dep5/
Upstream-Name: Config-Model-Backend-Augeas
Upstream-Contact: Dominique Dumont (ddumont at cpan.org)
Source: http://search.cpan.org/dist/Config-Model-Backend-Augeas/ Files: *
Copyright: 2008-2009, Dominique Dumont (ddumont at cpan.org)
License: LGPL-2+ Files: debian/*
Copyright: 2009, Dominique Dumont
License: LGPL-2+ License: LGPL-2+
This program is free software; you can redistribute it and/or
[snip]
You can see that: Please provide feedback! If you have problem migrating DEP5 files, yell, and we ll fix them. If this migration works fine, don t be shy, please say so. Under the hood:

Most of the migration work is specified in DEP-5 model [2]. Using config-model s GUI [3] to update DEP-5 model, about one hour was spent to: This shows one important feature of Config::Model: maintenance and evolution of a model is not a huge task. Even though copyright files are not configuration files, the same approach can be used to specify model and migration of other configuration files. Now comes the question of the migration as seen by the user. Well, it s your turn now. Try it and tell us how it works! Hopefully, encouraged by your feedback, other people will apply config-model to other specifications or other configuration. All the best (*) E.g, in the text format produced by the model editor GUI: 'Upstream-Contact',

'value_type' => 'string',
'migrate_from' =>
'formula' => '$old_maintainer',
'variables' =>
'old_maintainer' => '- Maintainer'

,
'type' => 'leaf',
'description' => '* Syntax: line based list [snip]'
,

12 January 2011

Petter Reinholdtsen: Chrome plan to drop H.264 support for HTML5 <video>

Today I discovered via digi.no that the Chrome developers, in a surprising announcement, yesterday announced plans to drop H.264 support for HTML5 <video> in the browser. The argument used is that H.264 is not a "completely open" codec technology. If you believe H.264 was free for everyone to use, I recommend having a look at the essay "H.264 Not The Kind Of Free That Matters". It is not free of cost for creators of video tools, nor those of us that want to publish on the Internet, and the terms provided by MPEG-LA excludes free software projects from licensing the patents needed for H.264. Some background information on the Google announcement is available from OSnews. A good read. :) Personally, I believe it is great that Google is taking a stand to promote equal terms for everyone when it comes to video publishing on the Internet. This can only be done by publishing using free and open standards, which is only possible if the web browsers provide support for these free and open standards. At the moment there seem to be two camps in the web browser world when it come to video support. Some browsers support H.264, and others support Ogg Theora and WebM (Dirac is not really an option yet), forcing those of us that want to publish video on the Internet and which can not accept the terms of use presented by MPEG-LA for H.264 to not reach all potential viewers. Wikipedia keep an updated summary of the current browser support. Not surprising, several people would prefer Google to keep promoting H.264, and John Gruber presents the mind set of these people quite well. His rhetorical questions provoked a reply from Thom Holwerda with another set of questions presenting the issues with H.264. Both are worth a read. Some argue that if Google is dropping H.264 because it isn't free, they should also drop support for the Adobe Flash plugin. This argument was covered by Simon Phipps in todays blog post, which I find to put the issue in context. To me it make perfect sense to drop native H.264 support for HTML5 in the browser while still allowing plugins. I suspect the reason this announcement make so many people protest, is that all the users and promoters of H.264 suddenly get an uneasy feeling that they might be backing the wrong horse. A lot of TV broadcasters have been moving to H.264 the last few years, and a lot of money has been invested in hardware based on the belief that they could use the same video format for both broadcasting and web publishing. Suddenly this belief is shaken. An interesting question is why Google is doing this. While the presented argument might be true enough, I believe Google would only present the argument if the change make sense from a business perspective. One reason might be that they are currently negotiating with MPEG-LA over royalties or usage terms, and giving MPEG-LA the feeling that dropping H.264 completely from Chroome, Youtube and Google Video would improve the negotiation position of Google. Another reason might be that Google want to save money by not having to pay the video tax to MPEG-LA at all, and thus want to move to a video format not requiring royalties at all. A third reason might be that the Chrome development team simply want to avoid the Chrome/Chromium split to get more help with the development of Chrome. I guess time will tell. Update 2011-01-15: The Google Chrome team provided more background and information on the move it a blog post yesterday.

Mike Hommey: Attempting to track I/O with systemtap

There are several ways a program can hit the disk, and it can be hard to know exactly what s going on, especially when you want to take into account the kernel caches. This includes, but is not limited to: There are various ways to track system calls (e.g. strace) allowing to track what a program is doing with files and directories, but that doesn t tell you if you re actually hitting the disk or not. There are also various ways to track block I/O (e.g. blktrace) allowing to track actual I/O on the block devices, but it is then hard to back-track what part of which files or directories these I/O relate to. To the best of my knowledge, there are unfortunately no tools to do such tracking easily. Systemtap, however, allows to access the kernel s internals and to gather almost any kind of information from any place in a running kernel. The downside is that it means you need to know how the kernel works internally to gather the data you need ; that will limit the focus of this post. I had been playing, in the past, with Taras script, which he used a while ago to track I/O during startup. Unfortunately, it became clear something was missing in the picture, so I had to investigate what s going on in the kernel. Setting up systemtap On Debian systems, you need to install the following packages: That should be enough to pull all the required dependencies. You may want to add yourself to the stapdev and stapusr groups, if you don t want to run systemtap as root. If, like in my case, you don t have enough space left for all the files in /usr/lib/debug, you can trick dpkg into not unpacking files you don t need:
# echo path-exclude /usr/lib/debug/lib/modules/*/kernel/drivers/* > /etc/dpkg/dpkg.cfg.d/kernel-dbg
The file in /etc/dpkg/dpkg.cfg.d can obviously be named as you like, and you can adjust the path-exclude pattern to what you (don t) want. In the above case, kernel drivers debugging symbols will be ignored. Please note that this feature requires dpkg version 1.15.8 or greater. Small digression One of the first problems I had with Taras script is that systemtap would complain that it doesn t know the kernel.function("ext4_get_block") probe. It is due to a very unfortunate misfeature of systemtap, where the kernel.* probes refer to whatever is in the vmlinux image. Modules probes have a separate namespace, namely module("name").*. So for the ext4_get_block() function, this means you need to set a probe for either kernel.function("ext4_get_block") or module("ext4").function("ext4_get_block"), depending how your kernel was compiled. And you can t even use both in your script, because systemtap will complain about either being an unknown probe Tracking the right thing I was very recently pointed to a Red Hat document containing 4 useful systemtap scripts ported from dtrace, which gives me a good occasion to explain the issue at hand with the first of these scripts. This script attempts to track I/O by following read() and write() system calls. Which is not tracking I/O, it is merely tracking some system calls (Taras script had the same kind of problem with read()/write() induced I/O). You could just do the very same with existing tools like strace, and that wouldn t even require some system privileges. To demonstrate the script doesn t actually track the use of storage devices as the document claims, consider the following source code:
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
/* Ensure the resulting binary is decently sized */
const char dummy[1024 * 1024] = "a";
int main(int argc, char *argv[])  
  struct stat st;
  char buf[65536];
  int i, fd = open(argv[0], O_RDONLY);
  for (i = 0; i < 100000; i++)  
    read(fd, buf, 65536);
    lseek(fd, 0, SEEK_SET);
    read(fd, buf, 65536);
    lseek(fd, 512 * 1024, SEEK_SET);
   
  close(fd);
  return 0;
 
All it does is reading some parts of the executable a lot of times (notice the trick to make the executable size at least 1MB). Not a lot of programs will actually do something as bold as reading the same data again and again (though we could probably be surprised), but this easily points the problem. Here is what the output of the systemtap script looks like for this program (stripping other unrelevant processes):
         process     read   KB tot    write   KB tot
            test   400002 25600001        0        0
Now, do you really believe 25MB have actually been read from the disk? (Note that the read() count seems odd as well, as there should only be around 200000 calls) Read-ahead, page cache and mmap() What the kernel actually does is that a read() on a file is going to check the page cache first. If there is nothing corresponding to the read() request in the page cache, then it goes down to the disk, and fills page cache. But as loading only a few bytes or kilobytes from the disk could be wasteful, the kernel also reads a few more blocks ahead, apparently with some heuristic. But read() and write() aren t the sole way a program may hit the disk. On UNIX systems, a file can be mapped in memory with the mmap() system call, and all accesses in the memory range corresponding to this mapping will be reflected on the file. There are exceptions, depending on how the mapping is established, but let s keep it simple. There is a lot of litterature on the subject if you want to document yourself on mmap(). The way the kernel will read from the file, however, is quite similar to that of read(), and uses page cache and read ahead. The systemtap script debunked above doesn t track these. I ll skip write accesses, because for now, they haven t been in my scope. Tracking some I/O with systemtap What I ve been trying to track so far has been limited to disk reads, which happen to be the only accesses occurring on shared library files. Programs and shared libraries are first being read() from, so that the dynamic linker gets the ELF headers and knows what to load, and then are mmap()ed following PT_LOAD entries in these headers. As far as my investigation in the Linux kernel code goes, fortunately, both accesses, before they end up actually hitting the disk, go through the __do_page_cache_readahead kernel function (this function was tracked in Taras script). Unfortunately, while it is called with an offset and a number of pages to read for a given file, it turns out the last pages in that number are not necessarily being read from the disk. I don t know for sure, because the latter had an effect on my observations, but some might even already be in the page cache. Going further down, we reach the VFS layer, which ends up being file-system specific. But fortunately, a bunch of (common) file-systems actually share page mapping code, and commonly use the mpage_readpage and mpage_readpages functions, both calling do_mpage_readpage to do the actual work. And this function seems to be properly called only once for each page not in the page cache already. If my reading of the kernel source is right, this however is not really where it ends, and do_mpage_readpage doesn t actually hit the disk. It seems to only gather some information (basically, a mapping between storage blocks and memory) that is going to be submitted to the block I/O layer, which itself may do some fancy stuff with it, such as reordering the I/Os depending on other requests it got from other processes, the position of the disk heads, etc. And when I say do_mpage_readpage doesn t actually hit the disk, I m again simplifying the issue, because it actually might, as there might be a need to read some metadata from the disk to know where some blocks are located. But tracking metadata reads is much harder, and I haven t investigated it. Anyways, skipping metadata, going further down after do_mpage_readpage is hard because it s difficult to back-track which block I/O is related to which read-ahead, corresponding to what read at what position in which file. do_mpage_readpage already has part of this problem because it is not called with any reference to the corresponding file. But __do_page_cache_readahead is. So knowing all the above, here is my script, the one I used to get the most recent Firefox startup data you can find in my last posts:
global targetpid;
global file_path;
probe begin  
  targetpid = target();
 
probe kernel.function("__do_page_cache_readahead")  
  if (targetpid == pid())
    file_path[tid()] = d_path(&$filp->f_path);
 
probe kernel.function("do_mpage_readpage")  
  if (targetpid == pid() && (tid() in file_path))  
    now = gettimeofday_us();
    printf("%d %s %d\n", now, file_path[tid()], $page->index*4096);
   
 
probe kernel.function("__do_page_cache_readahead").return  
  if (targetpid == pid())
    delete file_path[tid()];
 
This script needs to be used with a command given to systemtap, with the -c option, such as in the following command line:
# stap readpage.stp -c firefox
Each line of output represents a page (i.e. 4,096 bytes) being read, and contains a timestamp, the name of the file being read, and the offset in the file. As discussed above, do_mpage_readpage is not really the place the I/O actually occurs, so the timestamps are not entirely accurate, and the actual read order from disk might be slightly different, but it still is a quite reliable view in that the result should be reproducible with the same files even when they re not located on the same blocks on disk, and provided their page cache status is the same when starting the program. This systemtap script ignores writes, as well as metadata accesses (including but not limited to inodes, dentries, bitmap blocks and indirect blocks). It also doesn t account accesses to files opened with the O_DIRECT flag or similar constructs (raw devices, etc.) Read-ahead in action Back to the small example program, my systemtap script records 102 page accesses, that is, 417,792 bytes, much less than the actual binary size on my system (1,055,747 bytes). We are still far from the 25MB figure from the other systemtap script. But we are also far from the 128KiB the program actively reads (64KiB twice, leaving a hole between the two blocks). At this point, it is important to note that the ELF headers and program code all fit within a single page (4 KiB), and following the 1MiB section corresponding to the dummy variable, there are only 5,219 bytes of other ELF sections, including the .dynamic section. So even counting everything the dynamic linker needs to read, and the program code itself, we re still far from what my systemtap script records. Grouping consecutive blocks with consecutive timestamps, here is what can be observed:
Offset Length
0 16,384
983,040 73,728
16,384 262,144
524,288 65,536
(By now, you should have guessed why I wanted that big hole between the read()s ; if you want to reproduce at home, I suggest you also use my page cache flush helper) As earlier investigations showed, the first accesses by the dynamic loader are to read the ELF headers and .dynamic section. As mentioned above, these are really small. Yet, the kernel actually reads much more: 16KiB at the beginning of the file when reading the ELF headers, and 72KiB at the end when reading the .dynamic section. Subsequent accesses from the dynamic loader are obviously already covered by these accesses. Next accesses are those due to the program itself. The program actively reads 64KiB at the beginning of the file, then 64KiB starting at offset 524,288. For the first read, the kernel already had 16KiB in the page cache, so it didn t read them again, but instead of reading the remainder, it reads 256KiB. For the second read, however, it only reads the requested 64KiB. As you can see, this is far from being something like you wanted n KiB, I ll read that fixed amount now . Further testing with different read patterns (e.g. changing the hole size, read size, or reading from the dummy variable directly instead of read()ing the binary) is left as an exercise to the reader.

MJ Ray: SPI January 2011

The meeting agenda is already posted for tonight s (Wednesday s) SPI board IRC meeting which will be at 2030 UTC in #spi on irc.oftc.net. I m sorry it s pretty late notice, but you might like to come along and let the board know what you think they should be doing, or offer to help out with the new website.

Michal &#268;iha&#345;: GPL violation - what next?

After previous series of posts about Gammu usage in proprietary software, finding culprit and getting the sources I got number of questions and suggestions. So what are the suggestions? Lesson I've learned is that even though the website seems to be dead, the project itself does not have to be. This is what I thought about http://gpl-violations.org/ and I was proven wrong and these guys are now looking at my case. Another option is Software Freedom Law Center - http://www.softwarefreedom.org/. I've contacted them from the very beginning (about year ago) and got some useful hints, though now my contact seems to be gone (or simply too busy). FSF also provides information how to proceed in case of license violation. Maybe these hints will be also useful for somebody else and I hope they will help me as well.

Filed under: English Gammu Gpl 0 comments Flattr this!

Julien Danjou: Emacs snapshot Debian packages

I've decided to take over the maintenance of the unofficial emacs-snapshot Debian packages that were maintained by Romain Francoise. They are available on a dedicated page. Flattr this

Dirk Eddelbuettel: RProtoBuf 0.2.2

Thanks to two patches by Murray Stokely, we have a nice new minor release 0.2.2 of RProtoBuf out on CRAN. RProtoBuf provides GNU R bindings for the Google Protobuf data encoding library used and released by Google. The NEWS file entry follows below:
0.2.2   2011-01-11
   o    Applied two patches by Murray Stokely which 
         - correct a typo preventing some functions from being called, 
         - add bounds checking in call to google protobuf library, 
         - add a new name method 
         - add a tiny unit test for the above
         - add more graceful error handling
         - add support for import patterns other than .proto$, 
         - add simple reading file that does not exist (exception) test
         - add simple repeated field unit test
And courtesy of CRANberries, here is the diff to the previous release 0.2.1:
 ChangeLog                                               35 
 DESCRIPTION                                              8 
 R/00classes.R                                           11 
 R/internals.R                                            7 
 R/wrapper_EnumDescriptor.R                               6 
 inst/NEWS                                               12 
 inst/THANKS                                          only
 inst/doc/Makefile                                        4 
 inst/doc/RProtoBuf-quickref.pdf                      binary
 inst/doc/RProtoBuf-unitTests.pdf                     binary
 inst/doc/RProtoBuf.pdf                                2362 +++++++++-----------
 inst/doc/unitTests-results/RProtoBuf-unitTests.html     20 
 inst/doc/unitTests-results/RProtoBuf-unitTests.txt      23 
 inst/unitTests/runit.addressbook.R                      11 
 inst/unitTests/runit.enums.R                         only
 inst/unitTests/runit.golden.message.R                    7 
 inst/unitTests/runit.import.R                        only
 man/EnumDescriptor-class.Rd                             42 
 man/EnumValueDescriptor-class.Rd                        23 
 man/readProtoFiles.Rd                                    3 
 src/DescriptorPoolLookup.cpp                            26 
 src/S4_classes.h                                         6 
 src/wrapper_EnumDescriptor.cpp                          25 
 src/wrapper_EnumValueDescriptor.cpp                     25 
 24 files changed, 1357 insertions(+), 1299 deletions(-)
As always, there is more information at the RProtoBuf page which has a draft package vignette, a 'quick' overview vignette and a unit test summary vignette. Questions, comments etc should go to the rprotobuf mailing list off the RProtoBuf page at R-Forge.

Russell Coker: icmptx Tunneling IP over ICMP Echo

I ve just been playing with icmptx, a system for tunneling IP over ICMP Echo which could be handy if I ever find myself blocked by firewalls. Unfortunately the documentation is lacking. Below is a sample configuration that works for me, all you have to do is to put the correct IP address in for SERVERIP in both scripts and it should work. I m not sure what the ideal value for the MTU is, 65535 is the largest possible. For transmission it usually won t make any difference as the occasions when I need such things will usually be download-only sessions and the ACK packets will be quite small. For receiving data the server has an MTU of 1500 on the Ethernet port so nothing bigger than that will come in. Presumably when downloading data the packets will be transmitted in two ICMP fragments.One interesting feature of the program is that it doesn t match requests and replies. I presume this is because any firewall that only allows one reply per echo request will probably ensure that the reply contents match the request contents, so they just assume that a firewall will let all ICMP echo/reply traffic through. The upside of this is that it should give lower round trip times than any tunneling system that polls for return data.I ve filed some Debian bug reports about it, bug #609413 is a request for it to set icmp_echo_ignore_all when it s running and also emulate the regular PING functionality. Bug #609412 is a request for it to assign the IP address to the tun0 interface. Bug #609414 is a request for the server side of it to call daemon(0,0).I won t leave this running. Having to run a virtual server with the regular ICMP functionality disabled is too much effort for the small benefit that using ICMP tunneling may offer over DNS tunneling.My configuration scripts (with the IP address removed) are below.ConfigurationServer#!/bin/sh
set -e
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
icmptx -s SERVERIP &
sleep 0.5
ifconfig tun0 mtu 65535 10.10.10.1 netmask 255.255.255.0Client#!/bin/sh
set -e
killall icmptx true
icmptx -c SERVERIP &
sleep 0.5
ifconfig tun0 mtu 65535 10.10.10.2 netmask 255.255.255.0
wait

Romain Beauxis: Le roi est nu !

I am deeply thankful for the good work done by translators all over the world.. Sometimes, however, I also have a good laugh. This one, in particular:
ATTENTION ! Votre mot de passe pour de royaume d'authentification : <https://savonet.svn.sourceforge.net:443> SourceForge Subversion area ne peut tre sauvegard qu'en clair !

11 January 2011

Nikita Youshchenko: Different page headers on different pages in OpenOffice.org document

To get different page headers on different parts of document, one needs to set different page styles. To set page style for a page, one needs to double-click on new style name in page style list window, while cursor is inside the page. And surprise that changes style of all pages, not single page! So what about different page headers?.. Solution here. In fact this behaviour is somewhat logical. Unless there are explicit page breaks, the split of document into pages is not stable it changes while document is being edited. So applying a custom style to what currently is a page is actually an invalid operation. It is valid only for the first page after a break. Style for next page is defined in appropriate field of the style for previous page.

Michal &#268;iha&#345;: GPL violation - Getting the sources

Having found Gammu usage in proprietary software and finding somebody who is actually having the source code, the only remaining (and the hardest) step was to make them publish it. I started with explaining what actually GPL means, giving them links to useful documentation what they should do, but I'm probably not good enough in explaining the things. All I was given is source of some parts of Gammu code they have used (it is available in our git repository since then). Any attempts on explaining them that they should publish full source code of the thing to comply with GPL have simply failed. The problem with the sources they have given is that it is hardly to reuse in Gammu - it is hard to find on which version they based and more importantly, it really does not include much code which would be useful in Gammu these days.

Filed under: English Gammu Gpl 5 comments Flattr this!

Next.

Previous.