main mozilla tech

Reducing MozL10n+Gaia technical debt in Firefox OS 2.1 cycle

Firefox OS is becoming a more mature platform, and one of the components that is maturing with it is the mozL10n library.

In 2.0 cycle, which is already feature complete, we introduced the codebase based on the L20n project.

The 2.1 cycle we’re currently in is a major API cleanup effort. We’re reviewing how Gaia apps use mozL10n, migrating them to the new API and minimizing the code complexity.

Simplifying the code responsible for localizability of Firefox OS is crucial for our ability to maintain and bring new features to the platform.

There are four major areas we’re working on:

  • mozL10n.translate – with introduction of Mutation Observer, we want to phase out manual DOM translation calls.
  • mozL10n.localize – this function is extremely hard to maintain and does enough “magic” to confuse devs.
  • mozL10n.get – manual l10n gets are the biggest cause of bugs and regressions in our code. They are synchronous, not retranslatable and badly misused
  • mock_l10n – many apps still use custom MockL10n class in tests, some even use real MozL10n code in tests. This makes testing harder to maintain and develop new l10n features.

We’re working on all four areas and would love to get your help.

No matter if you are a Gaia app owner, or if you’ve never wrote a patch for Gaia. If you know JavaScript, you can help us!

All of those bugs have instructions on how to start fixing, and I will be happy to mentor you.

We have time until October 13th. Let’s get Gaia ready for the next generation features we want to introduce soon! 馃檪

main mozilla tech

Localization framework changes in Firefox OS 2.0 and plans for 2.1

On Monday we branched Firefox OS 2.0 which is the first branch to contain a new localization library that has been developed by my team.

What landed for 2.0

Library landing and reactions

The library itself landed exactly two months ago. In order to avoid any potential regressions, we’ve put a lot of work to ensure that it matches the behavior of the old code that it replaced. I believe we can now claim a success, because with two months of baking on master we didn’t get any serious regressions that would require us to change anything in our code.

The new library comes with a lot of unit tests and is stricter than the old code, so we had to fix a couple of small bugs where code has been passing an object instead of a string to our API and one related to one test failing on old machine with too little memory. That’s been simple to catch and fix.

We also got a few requests to improve the console log output and error output that the library produces in order to simplify developers work.

New features


The major new thing that Stas completed in this cycle is the support for pseudo-locales. While this could be done with the old code, it was significantly easier with the new code thanks to some architectural decisions like separation of buildtime and runtime code.

Pseudo-locales allow developers to evaluate their UI’s localizability against an artificially generated english-like locale to catch any hardcoded strings. It also generates right-to-left locale for testing purposes. Before that, we’ve been relying on often outdated localizations that we kept with our source code. Now we can always test against fully generated pseudo localization.

mozL10n.once wrapper

Another new feature is the introduction of mozL10n.once wrapper. We identified that a lot of Gaia apps are waiting for localization to be ready before they initialize themselves. That makes sense since a lot of those apps want to work with UI and localized strings, but the challenge in asynchronous world is that you never know if your code has been fired after or before mozL10n is ready.

Because of that, simply setting an event listener and waiting for window.onlocalized event is not enough (what if it already has fired before your code was launched?). Developers were using mozL10n.ready wrapper, but the problem with that is that is has been designed to re-fire on reach retranslation which meant that your init code has been fired every time user changed language. That’s not an intended behavior, but admittedly a rare one. What’s worse is that we retained all the init code in memory.

Now, with mozL10n.once we can safely initialize code when l10n resources are available and free the memory right after that.

Uses of l10n API

On top of adding new features, we’ve been mostly busy investigating and improving how the default Firefox OS apps interact with localization API. That led to multiple design decisions including introduction of the described above mozL10n.once.

Once we got the new wrapper, we started analyzing bootstrapping code of each and every Gaia app and updating it to use the proper L10n API. Twenty two fixed bugs later, we’re done!

It’s incredible how much we were able to accomplish in just two short months. We feel much better right now about the bootstrap process and we have a clear picture on what we want to do next.

Use new navigator.languages API

Thank’s to Mounir’s work on navigator.languages API and implementation we were able to remove the only Mozilla specific API in mozL10n. That means that mozL10n should work in any modern browser now!

What we’re working on for 2.1

2.1 will be as ambitious for us as 2.0 was. The hashtag of the work is still #cleanup, but now it’s much more about modifying our API so that it’s more transparent to developers and requires less manual code in their apps.

entity.attributes become node attributes

First thing we were able to land is the transition away from assigning l10n entity attributes as node properties. We cleaned up the hacks that have been used and switched to entity attributes as node attributes.

DOM overlays

Next, we have one leftover from the previous change and that is an infamous innerHTML. We currently don’t have any clear way to inject localizable DOMFragment in Gaia. Fortunately, we have one that fits perfectly in L20n. It’s called DOM Overlays, and we’re working on getting them into mozL10n. That will allow us to further secure L10n API and remove any innerHTML calls.

Mutation Observers

Majority of localizability code in Gaia apps is related to localization of DOM nodes. With Mutation Observers we will be able to significantly reduce the amount of manual calls to mozL10n API and make majority of calls be just about settings data-l10n-id attribute with Mutation Observers doing the rest.

Not only will it reduce the use cases of mozL10n.translate and mozL10n.localize, but I expect to be able to cut by over 50% the number of manual mozL10n.get calls and manual operations that are currently used to set the result of that call into the node.

Mutation Observers will simplify Gaia code, reduce the amount of bugs related to language switching and get us closer to runtime l10n API that we want to offer for Gecko.


There are still some interesting edge cases around how code boostrapping relies on particular pieces of environment. Does your code need DOM to be interactive? Does it need l10n resources to be loaded? Or maybe you need DOM to be localized? All those events happen asynchronously and we currently do not have a clean way to guard against any combination of those that your init code may require.

We’re working on a bootstrapping wrapper that will allow app developers to simply define which pieces of environment should their initialization be blocked by.

That will further secure the app boostrapping process and limit the risk of condition races.


One part of the bootstrap puzzle is how we fire event when certain bootstrap things happen. Right now we fire window.onlocalized event that means that mozL10n resources have been loaded, but doesn’t tell us anything about if document’s DOM has been localized (and is ready to be displayed).

With the work on the new event, we’ll be able to remove the global one, and settle on triggering on event on document and one on mozL10n object. Did I tell you that we’re still cleaning up? 馃檪

Move mozL10n to document

We originally placed mozL10n object as a property on navigator object. Because our API is transitioning to be per-document, it becomes an inconsistency and an obstacle to keep mozL10n API on navigator object. It hardly fits the world with iframes, ShadowDOM and HTML Templates. We’re going to move it to document.mozL10n.

Remove inline l10n

One of the built time optimizations that we have in Gaia is called inline l10n. We store some portion of the l10n resources within each HTML file in order to localize the UI before it is displayed. It’s not very scalable, costs us memory and performance, but historically helped us prevent flashes of untranslated content. We hope to be able to remove this optimization in this cycle which will significantly simplify our internal code and give us some small memory and performance wins.

Is this L20n yet?

While we introduce L20n concepts into mozL10n, we’re still pretty far from being able to say that we support L20n API in Gaia. There’s a lot of work to do and it’s going to be a challenging work as we port L20n concepts to Gaia, and merge lessons we learned while working on Gaia into L20n spec and implementation. What we hope to end up with is a single codebase used in Gaia and offered to web developers.

It’s an exciting journey and I’m so happy to make Firefox OS’s localizability the most modern among all OSes!

main mozilla po polsku tech

Wymy艣lanie Sieci na nowo

poni偶szy post jest t艂umaczeniem postu Mitchell Baker “Reinventing the Web

W zaledwie 20 lat Sie膰 sta艂a si臋 jedn膮 z najwa偶niejszych infrastruktur wsp贸艂czesnego 偶ycia. Dzi艣 dostrzegamy szans臋, by Sie膰, przez kolejny skok, sta艂a si臋 jeszcze bardziej u偶yteczna, przyjemniejsza, by otworzy艂a nowe szanse przed biznesem i mog艂a lepiej s艂u偶y膰 celom spo艂ecznym.

Wyobra藕 sobie bogactwo i wolno艣ci Sieci p艂ynnie zintegrowane w urz膮dzeniach mobilnych. Wyobra藕 sobie, 偶e to wszystko dzia艂a i to dzia艂a niezale偶nie od tego czy u偶ywasz aplikacji do specjalnego celu czy przegl膮darki by odkry膰 swoj膮 w艂asn膮 drog臋.

Wyobra藕 sobie, 偶e pobierasz aplikacj臋 i ona dzia艂a na wielu urz膮dzeniach, niezale偶nie od jakich producent贸w pochodz膮. Wyobra藕 sobie, 偶e mo偶esz wybra膰 czy chcesz kontaktowa膰 si臋 z dostawc膮 aplikacji bezpo艣rednio czy przez Apple, Google albo Microsoft.

Wyobra藕 sobie, 偶e masz wyb贸r tego kto kontroluje Twoj膮 to偶samo艣膰. Logujesz si臋 na stron臋 i wszystko co zrobi艂e艣 w sieci staje si臋 dost臋pne dla 艣wiata? A mo偶e logujesz si臋 i tylko to co Ty uznasz za publiczne staje si臋 dost臋pne dla 艣wiata?

Wyobra藕 sobie poczucie bezpiecze艅stwa kiedy jeste艣 online – kto ci臋 艣ledzi, kto sprzedaje informacje o tobie, kto ci臋 chroni i jak mo偶esz ochroni膰 siebie sam.

Wyobra藕 sobie, 偶e rozumiesz Sie膰, poczucie kompetencji by robi膰 rzeczy, by zmienia膰 te kt贸re istniej膮 i tworzy膰 kolejne, kt贸re spe艂niaj膮 twoje potrzeby. Wyobra藕 sobie, 偶e uczenie si臋 Sieci jest fajne i wykracza poza 艣wiat programist贸w obejmuj膮c zwyk艂ych ludzi.

Mozilla tworzy ten 艣wiat. Mamy jego wizj臋, architektur臋, technologie i plany produkt贸w. Te produkty tworzymy w艂a艣nie teraz. Mamy zasoby finansowe, by zrealizowa膰 te cele. To ekscytuj膮cy i bardzo produktywny okres. Sp贸jrz w nasz raport roczny, aby zobaczy膰 co zrobili艣my i co jest na horyzoncie. Do艂膮cz do nas, by razem budowa膰 ten 艣wiat.

main mozilla tech

L20n command-line toolchain

While we do hope that most of the work around l20n installations will have visual, GUI web tools, we also recognize that it’s important to provide simple, robust command-line tools that will cover the entire workflow.

For the l20n workflow to happen, we want to have a complete command-line toolchain that will automate common tasks required to operate and maintain localizations.

Behind this toolchain we provide a powerful API that localization and release tools will use, but the first consumer of those API will be the command-line based environment for l20n.

For this toolchain, we have three personas in mind:

  • a localizer
  • release driver
  • developer


Localizer should be able to start a new localization, stay informed about the status/completeness of his localization and have easy way to learn about updates. On top of that, he should be aided in navigating through the changes like new, modified or removed entities, get help in maintaining his localization between releases and work with the build team on marking which localization version is ready to be shipped.

Initially we want to provide four elements that will enable this:

  • on demand activated shell prompt customization that will provide contextual information while the localizer navigates around the l10n project
  • bootstrap command that will help initialize a new localization sandbox for a project
  • set of diagnosis tools like validator, completness check and localization status, all of which will analyze given localization and provide detailed information or what remains for the localization to be completed
  • an automated update tool that will help localizer keep the localization structure in shape, helping adding new strings, removing obsolete and provide information on the updated ones

The latter two concepts are powerful, and we have to be very careful when we design them. Each operation may harm the system, since we can easily loose the ability to review changes made by localizers in VCS history view if we apply changes that the localizer did not work on, or we can hide from the localizer the contextual information by removing entities that became obsolete, but their value has been reused in a new entity added just next to the old one.

All this kind of stuff has to be taken into account and we want to aim for a balance between simplifying day-to-day localization work, and maintaining VCS friendliness and sense of control that a localizer must have over his localization project.

Release driver

As with a localizer, we want to provide methods to automate common tasks, like selecting locales for a release, learning about status and progress of multiple locales at once, accepting new locales from localizers and batch updating locales with changes.

In order to achieve that, we want to provide:

  • a custom shell prompt that will aid release driver while he navigates between localization projects
  • scripts that will make it easy to analyze the status of localizations and validate them
  • tools that will allow release driver to maintain the list of locales and their version, to be released with a given version of the product
  • a script that will take a small “l10n patch” like a number of new entities, or value changes, and apply it across multiple locales


For the developer, we want to make sure that it’s easy to make his code localizable and maintain it that way.

This means that we want to make it easy to add new entities manually and verify that they work with tests, that we can extract entities from code where possible (like – XML), and it’s easy to spot hardcoded strings.

For this, we plan to provide the following tools:

  • a validator that outputs unit-test readable outcome statuses, so that unit-tests can be written against localizable code
  • an extractor for simple extracting and maintenance. The extractor should be able to help developer clean l10n files by removing strings that are no longer used in the code.
  • a tool that generates dummy test locale which enables the developer to visually find hardcoded strings

We want to make the whole environment project independent by allowing each project to define how process like bootstrapping, extracting should exactly work, where the l10n resources are stored and others.

The first set of tools will be aimed to help localizers, then we’ll work on tools for release managers and developers will come after that.

We’re in the process of writing API’s and designing the syntax for those commands. You can find the document with a proposal and the current source code here.

main po polsku tech

“Definiowanie w艂asno艣ci” autorstwa Paula Grahama

Marzec 2012

Jako dziecko przeczyta艂em ksi膮偶k臋 z opowie艣ciami o s艂ynnym osiemnastowiecznym s臋dzim z Japonii o imieniu Ooka Tadasuke. Jedna ze spraw kt贸re rozs膮dza艂 zosta艂a wniesiona przez w艂a艣ciciela baru z jedzeniem. Biedny student, kt贸ry m贸g艂 tylko pozwoli膰 sobi臋 na ry偶, jad艂 go, jednocze艣nie delektuj膮c si臋 zapachami z kuchni dochodz膮cymi z tego baru. W艂a艣ciciel chcia艂, by student zap艂aci艂 za zapachy, kt贸re dawa艂y mu przyjemno艣膰. Student krad艂 jego zapachy!

Ta historia przypomina mi si臋 za ka偶dym razem, gdy s艂ysz臋 o RIAA i MPAA oskar偶aj膮cych ludzi o kradzie偶 muzyki i film贸w.

Brzmi dla nas absurdalnie, by traktowa膰 zapachy jako w艂asno艣膰. Ale mog臋 wyobrazi膰 sobie sytuacj臋, w kt贸rej kto艣 m贸g艂by 偶膮da膰 op艂at za zapachy. Wyobra偶cie sobie, 偶e 偶yjemy w bazie na ksi臋偶ycu, gdzie powietrze sprzedawane jest na litry. Mog臋 sobie wyobrazi膰 dostawc贸w powietrza dodaj膮cych aromaty za dodatkow膮 op艂at膮.

Pow贸d, dla kt贸rego wydaje nam si臋 absurdalne, by traktowa膰 zapachy jako w艂asno艣膰 wynika z tego, 偶e taki system by nie dzia艂a艂. Na bazie ksi臋偶ycowej jednak, m贸g艂by.

To co jest uznawane za w艂asno艣膰 zale偶y od tego co jeste艣my zdolni uzna膰 za w艂asno艣膰. A to nie tylko mo偶e si臋 zmienia膰, to si臋 zmienia. Ludzie zawsze (dla pewnych definicji cz艂owieka i zawsze) traktowali ma艂e obiekty noszone przez osob臋 za w艂asno艣膰. Ale ludy zbieracko-艂owieckie nie traktowa艂y ziemi, na przyk艂ad, jako w艂asno艣ci w takim rozumieniu jak my. [1]

Powodem, dla kt贸rego tak wiele ludzi uznaje, 偶e w艂asno艣膰 ma jedn膮, niezmienialn膮 definicj臋, jest to, 偶e ta definicja zmienia si臋 bardzo wolno. [2] Tak si臋 jednak sk艂ada, 偶e znajdujemy si臋 w艂a艣nie w 艣rodku takiej przemiany. Koncerny muzyczne i studia filmowe dystrybuowa艂y to co tworzy艂y jak powietrze przez tuby na stacji ksi臋偶ycowej. Ale wraz z nadej艣ciem sieci, przenie艣li艣my si臋 na planet臋, kt贸rej atmosfer膮 mo偶emy oddycha膰. Dane przenosz膮 si臋 teraz jak zapachy. Koncerny i wytw贸rnie, przez po艂膮czenie my艣lenia 偶yczeniowego i kr贸tkoterminowej zach艂anno艣ci, ustawi艂y si臋 w pozycji tego w艂a艣ciciela baru, oskar偶aj膮c nas wszystkich o kradzie偶 ich zapach贸w.

(Powodem dla kt贸rego u偶ywam okre艣lenia “zach艂anno艣c kr贸tkoterminowa” jest fakt, 偶e prawdziwym problemem z wytw贸rniami i studiami jest to, 偶e ludzie, kt贸rzy nimi kieruj膮 s膮 wynagradzani premiami, a nie akcjami. Gdyby byli nakr臋cani akcjami swoich firm, szukali by sposob贸w by wykorzysta膰 przemian臋 technologiczn膮, zamiast walczy膰 z ni膮. Ale tworzenie nowych rzeczy trwa zbyt d艂ugo. Ich premie zale偶膮 od przysz艂orocznych przychod贸w, a najlepszym sposobem by je podnie艣膰 jest wyci膮gni臋cie wi臋cej kasy z tego co ju偶 robi膮.)

Co to znaczy? Czy ludzie nie maj膮 prawa, by nalicza膰 za to co tworz膮? Na takie pytanie nie istnieje prosta odpowied藕 typu tak lub nie. Ludzie maj膮 prawo nalicza膰 za kontent kiedy naliczanie za kontent dzia艂a.

Ale przez “dzia艂a” mam na my艣li co艣 bardziej subtelnego ni偶 “kiedy im si臋 uda”. Mam na my艣li kiedy ludzie mog膮 nalicza膰 za kontent bez zak艂adania kaftan贸w bezpiecze艅艣twa na ca艂e spo艂ecze艅stwa, by m贸c to zrobi膰. Ostatecznie, firmy sprzedaj膮ce zapachy na ksi臋偶ycu mog艂yby nadal to robi膰 na Ziemi, gdyby uda艂o im si臋 lobbingowo wymusi膰 prawa zmuszaj膮ce nas wszystkich do oddychania przez ich tuby tak偶e tutaj, cho膰 nie jest nam to ju偶 konieczne.

Szalone kroki prawne, kt贸re podejmuj膮 te wytw贸rnie i studia w艂a艣nie tak wygl膮daj膮. Gazety i magazyny maj膮 podobnie przer膮bane, ale one przynajmniej odchodz膮 z wdzi臋kiem. RIAA i MPAA zmusi艂yby nas do oddychania przez tuby gdyby mog艂y.

Ostatecznie, wszystko sprowadza si臋 do rozs膮dku. Kiedy naruszasz system prawny przez pr贸b臋 wykorzystywania masowych pozw贸w przeciwko losowo wybranym ludziom jako formy przyk艂adowego ukarania, albo lobbujesz za przepisami, kt贸re zepsu艂yby Internet gdyby uda艂o si臋 je przeforsowa膰, to jest to ipso facto dow贸d, 偶e u偶ywasz definicji w艂asno艣ci kt贸ra nie dzia艂a.

To w艂a艣nie w tym miejscu okazuje si臋, 偶e fajnie mie膰 dzia艂aj膮ce demokracje w wielu niezale偶nych krajach. Gdyby 艣wiat mia艂 jeden, autokratyczny rz膮d, wytw贸rnie i studia mog艂yby kupowa膰 prawa definiuj膮ce w艂asno艣膰 jako cokolwiek by chcia艂y. Ale na szcz臋艣cie s膮 wci膮偶 na 艣wiecie kraje, kt贸re nie s膮 koloniami praw autorskich Stan贸w Zjednoczonych, a nawet w USA, politycy nadal obawiaj膮 si臋 obywateli, je艣li tych zbierze si臋 wystarczaj膮co du偶o. [3]

Ludzie, kt贸rzy rz膮dz膮 USA mog膮 nie by膰 zachwyceni kiedy obywatele lub inne kraje odmawiaj膮 nagi臋cia si臋 do ich woli, ale ostatecznie le偶y to w naszym interesie, aby nie istnia艂 jeden punkt, kt贸ry ludzie chc膮cy opakowa膰 prawo, by s艂u偶y艂o ich interesom, mogliby zaatakowa膰. W艂asno艣膰 prywatna jest niesamowicie potrzebn膮 ide膮 – mo偶liwe, 偶e jednym z najwi臋kszych wynalazk贸w. Dotychczas, ka偶da jej nowa definicja przynosi艂a nam rosn膮ce bogactwo materialne. [4] Wydaje si臋 by膰 rozs膮dnym, by za艂o偶y膰, 偶e najnowsza te偶 to uczyni. By艂oby katastrofalne gdyby艣my wszyscy musieli korzysta膰 z przestarza艂ej wersji tej definicji, tylko dlatego, 偶e kilku pot臋偶nych ludzi jest zbyt leniwych, aby przej艣膰 na nowsz膮.


[1] Je艣li chcesz dowiedzie膰 si臋 wi臋cej o ludach zbieracko-艂owieckich, polecam ksi膮偶k臋 Elizabeth Marshall Thomas “The Harmless People” oraz “The Old Way“.

[2] Zmiana w definicji w艂asno艣ci jest zazwyczaj wynikiem post臋pu technicznego, a poniewa偶 post臋p techniczny przyspiesza, mo偶na za艂o偶y膰, 偶e tempo zmian w definicji w艂asno艣ci r贸wnie偶. To za艣 oznacza, 偶e tym wa偶niejsze jest dla spo艂ecze艅stw, by mog艂y 艂agodnie reagowa膰 na te zmiany, poniewa偶 b臋d膮 one nast臋powa膰 coraz szybciej.

[3] Z tego co wiem poj臋cie “kolonia praw autorskich” (ang. copyright colony) zosta艂o u偶yte po raz pierwszy przez Mylesa Petersona.

[4] Stan technologii nie jest wy艂膮cznie funkcj膮 definicji w艂asno艣ci. Ka偶de z nich zawiera si臋 w drugim. Ale pomimo tego, nie mo偶esz miesza膰 w definicji w艂asno艣ci bez wp艂ywania na (i prawdopodobnie szkodzenia) stanowi technologii. Historia ZSSR daje nam 偶ywy przyk艂ad iluistruj膮cy tak膮 sytuacj臋.

autor: Paul Graham
t艂umaczenie: moje (wersja do edycji)

main mozilla tech

L20n – what to add before 1.0

As I mentioned in my last blog post, we’re narrowing down the list of features that we’re willing to consider for inclusion into L20n 1.0 prior to its freeze and release.

Here’s the list:

Name Driver Target Milestone
difference between entities/macros from the resource and variables provided by the developer stas 1.0
difference between public and private attributes/entities gandalf 1.0
default values for hashes/arrays gandalf 1.0
globals namespace gandalf 1.0
import command gandalf 1.0
conditional blocks gandalf 1.0
value as ID (gettext mode) stas ?
string as ID (simple gettext mode) stas ?
key as string stas ?
relative referrals gandalf 1.0
dependency list gandalf 1.0
computer readable comments gandalf ?
multi-language resource files gandalf 1.0
Switch expression gandalf ?
attribute indexes stas 1.1
nested indexes gandalf 1.0
Expression errors gandalf 1.0
workflow gandalf 1.0
resource file syntax stas (support from: kaze, fantsai) 1.0
forbid referencing public entities stas ?
Macro attributes gandalf ?

All of those features represent some feedback item we got and we’re trying to evaluate it ASAP in order to finalize the parser/interpreter couple and work on the workflow toolchain for L20n 1.0 next.

If you want to discuss any of the items, join our localization-20 group and start a new thread for each feature.

If you want to add a new feature to be considered, start a wiki article in L20n/Features namespace.


main mozilla tech

L20n, feedback round

Last months have been extremely busy for L20n. I basically focused 100% of my time on the project, driving simultaneously multiple aspects of the project to completion.

L20n is a very complex project, not only technically, but also socially. Localization technologies have always been of minor importance for most of the software world so we never really develop technologies that could anyhow match the complexity of the human languages. The most common mindset, even among those who have to deal with localization, is that you can get “most of the stuff” done with simple key-value pair lists where English string is a key, and target localization string is a value.

It’s a bit like claiming that most of Firefox front end could be written in BASIC.

L20n is on the other side of the spectrum. It brings the localization technology to the new level, and in result breaks almost all paradigms of what people are used to do with l10n and breaks how it “usually works”.

In result, the major challenge when helping someone learn what L20n is, is to convince the person that she has to stop trying to match its components to the concepts the person knows from other l10n frameworks. It will just not do.

The reward is that once you get beyond the game of “how does L20n relate to Gettext / DTD / Properties?” people get into the “Oooh!” moment and what follows is a litany of ideas of what would be nice to have if we are about to reinvent the localization technologies. I love it 馃檪

As many project leaders before me have observed, getting close to a target milestone always turns you from a visionary leader that sets the goals and drives them to completion into some sort of a butcher that says “no” to everything except the most crucial additions in the fear of never ending cycle of adding more and more without getting your project released.

So here we are. For the last month we’ve been working pretty close with several projects – Boot 2 Gecko, Jetpack, Firefox – and we got plenty of feedback, from minor additions to major suggestions. Now is the time to narrow down the list of changes we’re ready to incorporate for 1.0, close the list, work toward the release, and push everything else back to L20n:Next.

In the next blog post I’ll list the proposals and the status of the discussion on those.

main mozilla tech

Mozillians on Digital Freedom

Matjaz wrote a blog post on his presence in ACTA debate in Slovenia. With multiple interviews, shows and a speech at a government organized roundtable discussion, Matjaz became an ad-hoc representative of our collective in front of the audience that we rarely interfere with. That is just awesome Matjaz! Congratulations, dude!

But it’s not only Matjaz! Mozillians have been active all around Europe in the public debate on ACTA. Me and Sta艣 have been both helping the civic NGO side on ACTA front in Poland, Otto in Estonia, and Bogo in Sofia, just to mention a few.

Three things that strike me about this are:

1) The whole generation of Mozillians who gained their experience by shaping local Mozilla communities in Europe are now becoming respected public figures precisely because of what we are doing at Mozilla project. For years we’ve been responding to what was needed, adapting to the changing landscape on the cross of the local and global Web, growing up to roles that had to be filed. It’s amazing to see that our experience and cred gained by fighting for the Open Web is now placing us in the spotlights when the future of the Internet is being debated.

2) We all seem to intuitively build our positions on a small set of principles that we wrote just a few years ago.
I remember the time when Gerv has been driving the conversation at FOSDEM trying to isolate the limited set of statements and principles that unite us, Mozillians, and I even remember voices questioning the need for such a document arguing that we were successfully able to raise and grow our project without it.
These days, the very first thing that we do when we face something that we intuitively feel is wrong for the Internet, is that we cross check it against the Mozilla Manifesto.

We are united under this manifesto, it does work as a written summary of what we believe in and now it serves us as a point of reference when we face proposals that are not in line with the Internet that we want to see. Just take a look at Polish Mozilla Community position on ACTA, or read Matjaz’s speech.

It聽 grows far beyond what we originally expected and everyone who worked on this document should be proud now. I certainly am!

3) As individuals, but also as representatives of Mozilla project, we are being asked to speak, because people want to know what Mozilla thinks. It’s important. Like in all other debates that we took part in, web standards, browser wars, web video formats or privacy, Mozilla has a unique role and it’s fundamental for us to walk this thin line of subtle balance that we aim for with our hybrid nature. I’m particularly proud to read Mitchell’s words and also journalists commenting on our statement in a way like the following:

Essential statement on ACTA by Polish Mozilla Community
It’s worth pointing out, that the community’s position is very rational, calm and stripped of the emotions that are driving most of the conversation these days.
Polish PM, Donald Tusk, has said that Poland will not ratify ACTA if the there will be any doubts, and this statement by the community clearly presents those that are of vital importance for the information society.
The statement written by the Mozilla community in Poland is important for yet another reason. Its authors are not connected to any market player. Mozilla Community is not an NGO or political organization. Usually, Mozilla and its community do not comment law related topics.
Those are the people that usually avoid law related topics focusing on their great, a bit crazy vision.
Apparently what has happened, made them feel they have to speak up.

In cases like SOPA in US or ACTA in Europe, Mozilla DNA that has shaped all of us, is being injected and influences the debate in a profound way.
The same vision that has shaped Firefox, Thunderbird, Drumbeat and tons of other projects and products, and through this influenced how the Web looks like today on both, technological and social layer, has also shaped our minds and beliefs, and through this is now impacting the public debate that is being held all around the world on the future of the Interent.

Isn’t that just amazing?

p.s. We’re igniting a newsgroup devoted to the topic of digital freedom. Join us there!

main mozilla po polsku tech

Stanowisko Polskiej spo艂eczno艣ci Mozilli w sprawie ACTA

Polska spo艂eczno艣膰 Mozilli opublikowa艂a stanowisko w sprawie decyzji Rady Ministr贸w w sprawie podpisania umowy ACTA.

Zach臋camy do zapoznania si臋 z naszymi wnioskami.

main mozilla po polsku tech

Mozilla Europe i Mozilla w Europie

Projekt Mozilla odnosi niesamowite sukcesy w Europie. Cele jakie postawili艣my sobie, spisane w ramach Manifestu Mozilli, s膮 bardzo dobrze odbierane w 艣rodowisku Internaut贸w w Europie.

Dzi臋ki temu Mozilla ma 艣wietne wyniki udzia艂u na rynku Europejskim, ogromn膮 rzesz臋 os贸b uczestnicz膮cych w projekcie, 艣wietne kontakty z innymi spo艂eczno艣ciami internetowymi, silne spo艂eczno艣ci lokalne i w efekcie mamy miejsce przy stole w trakcie wa偶nych debat dotycz膮cych przysz艂o艣ci Internetu.

Ma艂o kto jednak wie, 偶e ten sukces uda艂o nam si臋 osi膮gn膮膰 korzystaj膮c z bardzo skomplikowanej struktury organizacyjnej – w rzeczywisto艣ci istniej膮 trzy organizacje kt贸re powstawa艂y w r贸偶nych momentach w odpowiedzi na konkretne problemy jakie nasz projekt napotyka艂 (, i

Peterv ustawia pierwszy hosting dla Mozilli Europe w 2003

W ci膮gu ostatnich lat spo艂eczno艣膰 Mozilli w Europie pracowa艂a wymiennie z jedn膮 z tych trzech organizacji co niepotrzebnie komplikowa艂o sytuacj臋 i utrudnia艂o synchronizacj臋.

Jedn膮 z nich, stricte europejsk膮 jest stowarzyszenie Mozilla Europe za艂o偶one w 2004 roku przez grup臋 aktywist贸w Mozilli w czasach gdy Mozilla Foundation nie by艂a w stanie operowa膰 efektywnie na terenie Europy i szukali艣my w艂asnych rozwi膮za艅 pozwalaj膮cych nam organizowa膰 nasz projekt.

Przez ostatnie 7 lat Mozilla Europe opiekowa艂a si臋 wi臋kszo艣ci膮 aktywno艣ci projektu, organizowa艂a spotkania, wspiera艂a konferencje, uczestniczy艂a w rozwi膮zywaniu konflikt贸w w spo艂eczno艣ciach, chroni艂a marki, wsp贸艂pracowa艂膮 z pras膮 i anga偶owa艂a si臋 we wspieranie rozwoju projektu w r贸偶nych regionach Europy.

Od lipca 2005 mia艂em zaszczyt uczestniczy膰 w pracach stowarzyszenia jako cz艂onek zarz膮du. By艂 to niesamowity czas i ogromna odpowiedzialno艣膰, poniewa偶 Mozilla Europe koordynowa艂a tworzenie si臋 struktur i spo艂eczno艣ci w Europie, ale te偶 szansa na wykorzystanie mojego do艣wiadczenia i wiedzy z Polski w skali ca艂ego kontynentu.

Mozilla jes niezwyk艂ym projektem, poniewa偶 od wielu lat ju偶 stanowimy tak unikalny byt, 偶e nie mamy od kogo si臋 uczy膰. Wszystkie decyzje, struktury, modele pracy i rozwi膮zania jakie maj膮 s艂u偶y膰 realizacji naszej misji musimy albo wymy艣la膰 ca艂kowicie od nowa, albo adaptowa膰 do swoich potrzeb te zaczerpni臋te od innych projekt贸w Internetowych, kreatywnych firm, fundacji non-profit, albo projekt贸w Open Source.

Dotychczasowe decyzje i kierunki dzia艂a艅 pozwoli艂y nam rosn膮膰 i adaptowa膰 si臋 do zmian na rynku Internetowym na tyle skutecznie, 偶e dzi艣 Mozilla ma wi臋ksze mo偶liwo艣ci realizowania swoich cel贸w statutowych ni偶 kiedykolwiek w przesz艂o艣ci!

To za艣 pozwala nam skupia膰 si臋 na adaptowaniu i rozwijaniu samej struktury projektu, tak aby przenosi膰 udane rozwi膮zania lokalne na poziom globalny. W efekcie powsta艂 projekt “One Mozilla”, kt贸rego celem jest unifikacja projektu w ramach jednej organizacji globalnej – Mozilla Foundation.

W efekcie powoli i sukcesywnie starali艣my si臋 identyfikowa膰 dzia艂ania jakie podejmuje stowarzyszenie Mozilla Europe i wdra偶a膰 je na skal臋 globaln膮 w ramach ca艂ego projektu. Wiele inicjatyw kt贸re przez lata dzia艂y si臋 tylko w Europie pod auspicjami Mozilli Europe staje si臋 globalne jak funkcje reprezentant贸w Mozilli, wolontariuszy pe艂ni膮cych funkcje rzecznik贸w prasowych, uczestnictwo w konferencjach, organizacja w艂asnych spota艅 w ramach inicjatyw MozCamp, wsp贸艂praca z agendami rz膮dowymi zajmuj膮cymi si臋 Internetem i tak dalej.

Taki model organizacji pozwala nam lepiej skalowa膰 nasze dzia艂ania na ca艂y 艣wiat i pomaga膰 innym regionom korzysta膰 z tego co powsta艂o w Europie, a tak偶e u艂atwia synchronizacj臋 i efektywno艣膰 relacji mi臋dzy projektem a fundacj膮.

Efektem ubocznym by艂a te偶 powolna redukcja roli stowarzyszenia Mozilla Europe na rzecz globalnej Mozilla Foundation i ostatecznie zarz膮d Mozilli Europe przy wsp贸艂pracy z Mozilla Foundation podj膮艂 decyzj臋 o rozwi膮zaniu tej pierwszej i przekazaniu wszystkich inicjatyw pod auspicja globalnej Mozilli Foundation.

Ten ruch jest czysto operacyjny, nie wp艂ywa w 偶aden spos贸b na nasze cele, dzia艂ania i prace. Mozilla Europe nie zatrudnia艂a pracownik贸w i zarz膮d jest przekonany, 偶e ta decyzja nie powinna mie膰 偶adnego wp艂ywu na prac臋 projektu i naszych spo艂eczno艣ci.

Prezes stowarzyszenia, Tristan Nitot, oraz cz艂onkowie zarz膮du z ni偶ej podpisanym, b臋d膮 nadal opiekowa膰 si臋 dzia艂aniami Mozilli w Europie i traktujemy ten ruch jako czyst膮 redukcj臋 biurokracji a tak偶e okazj臋 do przedyskutowania modelu organizacji naszego projektu w Europie.

Chcemy zaktywizowa膰 wi臋ksz膮 grup臋 lokalnych spo艂eczno艣ci do pracy na poziomie ca艂ej Europy i uruchamiamy nowe inicjatywy pozwalaj膮ce wi臋kszej liczbie os贸b wp艂ywa膰 na losy Mozilli na poziomie ca艂ego kontynentu. Mamy nadziej臋 tak偶e na silniejsz膮 reprezentacj臋 naszych dzia艂a艅 w ramach projektu Drumbeat oraz licznych inicjatyw znanych z Mozilla Labs w Europie a tak偶e planujemy otworzy膰 kilka otwartych przestrzeni dla os贸b zainteresowanych prac膮 nad rozwojem Internetu w ramach projektu MozSpaces. Pierwsze powstan膮 w Londynie i Berlinie w 2012.

By艂em ogromnym zwolennikiem tego rozwi膮zania poniewa偶 widz臋 w nim szans臋 na lepsz膮 adaptacj臋 naszych dzia艂a艅 w Europie do dynamicznego rynku Interentowego oraz na zwi臋kszenie aktywno艣ci samej Mozilla Foundation na poziomie globalnym w Europie, Azji, Afryce czy Ameryce Po艂udniowej.

Europa jest przyk艂adem i inspiracj膮 dla spo艂eczno艣ci Mozilli na ca艂ym 艣wiecie i wierzymy, 偶e nasze globalne struktury s膮 dzi艣 wystarczaj膮co silne, aby m贸c bezpo艣rednio anga偶owa膰 si臋 i reagowa膰 na potrzeby lokalne. Sieciowa struktura naszego projektu dojrza艂a przez ostatnie lata i sprawia, 偶e mo偶emy dzi艣 wi臋cej ni偶 kiedykolwiek przy mniejszym poziomie biurokracji.

Cz艂onkowie zarz膮du Mozilli Europe wraz z liderami spo艂eczno艣ci lokalnych stworz膮 nast臋pny rozdzia艂 historii Mozilli w Europie i wsp贸艂pracuj膮c z Mozilla Foundation b臋dziemy rozwija膰 projekt Mozilla reaguj膮c na potrzeby i wyzwania kolejnych lat.