Greg's blog

To content | To menu | To search

Wednesday, March 25 2009

Des applications web vraiment libres ?

Aujourd'hui l'actualité m'encourage à prendre du temps pour partager quelques reflexions à propos du logiciel libre. L'article de Richard Stallman (RMS)[1] sur gnu.org, The Javascript Trap, fait du bruit. Il me semble mal compris. Deux autres nouvelles intéressantes : une opinion que Eric S. Raymond (ESR)[2] qualifie lui-même d'hérésie, reprise dans Eric S. Raymond speaks heresy; et l'abonnement obligatoire à last.fm Radio[3] pour les utilisateurs hors US, UK et Allemagne. Note : cet article est en cours de rédaction, mais j'ai decidé de le publier pour pouvoir bénéficier de retours si quelques lecteurs s'égarent sur ce blog. N'hésitez donc pas a ajouter vos commentaires. J'en prendrai compte pour faire évoluer ce post. Voir l'avis de Marc dans Le piège du JavaScript.

L'essai de RMS décrit l'exception qui existe actuellement sur la partie cliente des applications web. Il se concentre sur le langage Javascript mais n'exclut pas d'autres environnement tout aussi problématique - voire davantage - comme Flash, Silverlight ou les applet Java. Le Javascript est utilisé actuellement pour créer de vraies applications[4]. Dans ce cas, si l'on adhère aux principes du logiciel libre, il semble évident que ces applications Javascript non triviales doivent également être libres. Si c'est le cas, l'utilisateur devrait pouvoir exécuter une version modifiée à la place du code original. Certaines réactions ont dénoncé une position quelque peu extremiste de RMS. Cependant, son exposé est clair et je partage son point de vue : à partir du moment où l'on utilise une application, on peut exiger qu'elle soit libre. Le langage dans lequel l'application est écrite n'y change rien.

Cet essai a l'intéret de soulever le problème plus général du manque d'applications web libres. Il y fait allusion brièvement, en indiquant qu'un texte complémentaire lui serait dédié. Si je prend mon exemple personnel, j'essaie autant que possible d'utiliser des logiciels libres. J'installe des Debian GNU/Linux sur toutes mes machines (mes serveurs Gandi ou mes machines personnelles), et n'installe presque exclusivement des applications libres. Je dis bien "presque" car malheuresement dans certains cas, je ne peux m'en passer. Un exemple simple est flashplayer qui même s'il peut être en partie remplaceé par Gnash[5], reste parfois indispensable... je le regrette. Cependant j'utilise des services web. Et c'est là que s'illustre l'autre face du problème. J'utilise twitter qui n'a rien de libre, juste une API documentée. Paradoxalement j'utilise twidge comme client, qui lui est libre mais cela ne résout rien. Alors bien sûr, vous me direz, "utilise identi.ca qui a ouvert son code !"; ce n'est pas faux, mais je me heurte alors à un autre problème : la base utilisateur. Ce problème je l'ai déja rencontré avec la messagerie instantanée. Fervent promoteur de Jabber, jusqu'à installer un serveur[6] et commencer à designer un client[7], j'ai du me résoudre à me créer un compte MSN que j'utilise chaque jour pour discuter avec des amis. Dans le cas de MSN, si je décompose la pile logiciel, nous trouvons le serveur - et probablement les proxy -, le protocole, et enfin le client. De nombreux clients libres existent[8]. Pour les serveurs c'est autre chose puisqu'ils sont propriétaires et maintenus par Microsoft MSN. Et enfin du côté du protocole ce n'est pas mieux. Tout ceci est bien déprimant ! Mais finalement pour les applications est-ce vraiment mieux ? gmail, twitter, last.fm... que d'applications propriétaires ! On y gagne tout de même un protocole souvent standard (HTTP Rest ou autre) et une API documentée, mais pas libre. Cela a permis d'écrire des clients libres, et d'avoir le plaisir d'en trouver en Haskell (twidge).

Pourquoi vouloir une application web libre ? Et bien, ce sont les mêmes raisons que pour les autres logiciels. Je veux pouvoir le comprendre, l'adapter à mes besoins, le ré-utiliser pour d'autres projets. Le code, au même titre que des livres, représente du savoir. Du savoir appliqué certes, mais du savoir quand même. Les fondateurs des figures de proue du web2.0 rétorqueraient probablement qu'ils doivent garder leur avantage concurrentiel, leurs petits secrets et ne pas faciliter la l'apparition d'offres similaire qui utiliseraient la même base logicielle. Cet argument n'a rien de nouveau. Dans certains domaines, il est plausible. Elaborer un modèle économique viable, voire - osons-le - efficace, demande de la créativité. Il n'en demeure pas moins désuet à une époque où nombre de grands éditeurs[9] expriment leur attrait pour le logiciel libre. Ce serait naïf de les croire philanthropes, Ils voient dans le logiciel libre un modèle efficace qui répond à leurs besoins sur certains segments de marché. Dans son essai Open Source and the Commodization of Software[10], Ian Murdock[11] expose comment le logiciel libre s'est imposé de facto dans certains domaines. Cela s'est fait en partie en rendant le code source accessible facilement. Ensuite pour générer des revenus, des offres à valeur ajoutée sont construites au-delà du code source. Ses offres vont du conseil, à l'adaption du logiciel en passant par l'externalisation de l'exploitation du logiciel.

Ces voies me paraissent envisageables pour des applications web. Certaines entreprises ont décidé de les suivre. identi.ca propose un service hébergé. L'utilisateur n'a pas à se soucier de l'exploitation du logiciel - ici Laconica -. Un autre modèle consiste à implémenter en priorité les fonctionnalités demandées par les utilisateurs qui paient. La démarche repose alors sur l'adaption du logiciel aux besoins de l'utilisateur. Si certains voient dans le mouvement du logiciel libre un idéalisme forcené, il serait temps d'équilibrer cette vision et de comprendre les avantages économiques qu'il apporte. A suivre...

Notes

[1] fondateur du projet GNU et de la FSF, a initié les projets Emacs, GCC et GDB

[2] auteur entre autres de l'essai The Cathedral and the Bazaar, du livre The Art of Unix Programming (TAOUP) et des logiciels libres fetchmail, bogofilter et gpds

[3] 3 dollars ou 2.50 euros par mois

[4] il prend l'exemple de Google Docs dont le code Javascript obfusqué représente environ 500k

[5] par ailleurs classé dans les projets prioritaires de GNU

[6] malheuresement jabberd à l'époque

[7] repris par de très bonnes mains, ma contributions fût vraiment mineure

[8] j'utilise bitlbee et kopete

[9] Sun avec la libération de Java et de Solaris, ainsi que le rachat de MySQL, IBM par ses multiples contributions à des projets libres dont Linux et malgré quelques brevêts mal venus, et Apple

[10] Open Sources 2.0, O'Reilly, 2005

[11] Le ian de Debian, aujourd'hui chez Sun

Wednesday, November 19 2008

Optimisation du blog

Les quelques lecteurs de ce blog ont du remarquer qu'il était lent a charger : 8.573 s pour la page d'accueil, c'est ... très très long. Il est pourtant hébergé sur deux parts gandi, ce qui est largement suffisant - bien qu'il y ait d'autres services et sites web sur ce serveur. 512 MB de RAM, avec de la RAM de libre. Curieux de trouver d'où provenait cette lenteur, j'ai pris un peu de temps pour profiler dotclear et ajouter des mécanismes de cache.

Continue reading...

Monday, November 17 2008

I'm back

Et oui de retour après... longtemps. Plein de prévisions, quelques réflexions, plein de projets mais finalement peu de concret sur ce blog. Pourtant il s'est passé des choses depuis. Un nouveau design (quelques changements dans la css) pour changer et pour que vos ecrans consomment moins d'énergie. J'ai finalement mis django de côté, je suis de loin les évolutions qui touchent le projet et m'intéresse toujours aux questions techniques qui concernent le framework mais j'ai plutôt jeté mon dévolu sur des framework bases sur des langages fonctionnels comme haskell (HaPPS) ou scheme (PLT-Scheme Continue). Le distribué et notamment erlang et les framework Map/Reduce (Hadoop, Disco...) m'attirent également beaucoup. Mon intérêt se porte également sur la visualisation d'informations et l'intelligence artificielle (a un niveau basique).

Nouveau job : virtualisation, développement kernel / système et du python. J'ai pu redécouvrir le C++ avec un autre regard. Bien qu'il reste difficile d'avoir le même niveau d'abstraction que des langages comme haskell, ocaml ou scheme; c'est agréable d'avoir :

  • un typage plus fort que le C,
  • une utilisation la plus systèmatique possible de const (sur lequel g++-4.3 est assez rigoureux comparé a du C avec gcc-4.x)
  • les references (pour éviter de passer des pointeurs non initialisés),
  • les functions classes pour avoir un mécanisme plus sûr de pointeur sur fonction,
  • les exceptions (avec la documentation des expressions susceptibles d'être levées par la fonction, dans son prototype i.e. int fonction(a, b, c) throw (runtime_error);
  • les templates pour disposer de structures génériques (avec modération pour ne pas avoir un binaire trop avide de mémoire)

Continue reading...

Saturday, February 23 2008

Quelques nouvelles : système et sécu, programmation fonctionnelle, moteur de blog

Quelques nouvelles pour les quelques lecteurs de ce blog qui doivent se demander si j'ai perdu les clés de la cave dans laquelle je me suis enfermé. Première nouvelle, non je ne suis ni dans une cave ni enfermé mais je n'ai pas trouvé le temps d'écrire un billet avant aujourd'hui. Je me suis replongé dans le dev d'exploit sous linux en me donnant pour objectif de gérer la plupart des protections userland (heap hardening, -fstrack-protector-all, ...) et kernel (ASLR, NX, et autres, en commençant par les fonctionnalités de base du noyau 2.6, puis en continuant avec ExecShield et Pax). Dans le même temps, l'actualité récente m'a poussé à m'intéresser de plus près aux vulns kernel.

En parallèle, je garde toujours un oeil sur la programmation fonctionnelle, notamment Haskell. Je profite de mes travaux en exploitation de vuln userland et kernel pour écrire du code concret et je l'espère utile en Haskell. Pour l'instant c'est du python ou un peu de ruby (metasploit), langages très appréciés par la communauté sécurité à côté des chers dinos que sont le C et le perl. Néanmoins je pense que ces travaux autour de la sécurité se prête bien à la programmation fonctionnelle et l'écriture de DSLs. Un projet intéressant était mosvm présenté par Wes Brown au DefCon et au HITB de 2006.Il consistait en l'exécution distante de processus dans une VM Lisp. C'est dans la continuité :

Pas mal de choses intéressantes à faire en perspective :). Je vais d'abord continuer ce que j'ai commencé et saisir les opportunités d'écrire du haskell quand elles se présentent.

Pour finir, j'avais parlé du redesign de ce blog. Je me suis dit que c'était l'occasion de migrer vers un moteur de blog écrit en python et pourquoi pas - à tous hasard - reposant sur django. J'ai regardé ce qui se faisait, tenté de construire sur le django-blog de basic apps et au final je me suis rendu compte que j'avais besoin de vraiment comprendre chaque élément et de pouvoir facilement les modifier. Je m'en suis vraiment rendu compte quand j'ai commencé à écrire une classe et des outils pour importer ce blog depuis dotclear2. J'ai alors décidé de ré-écrire un moteur de blog pour mes besoins. Dans un sens, c'est dommage, car ça répartit les efforts au lieu de les concentrer sur quelques projets, mais je prend ça comme un projet perso sans ambition autre que répondre à mes besoins et sans vouloir faire un moteur de blog de plus comme dotclear ou wordpress.

Thursday, January 17 2008

Ce que j'attends en 2008

Ca ressemble à des prédictions sans en être :). Je ne suis pas voyant et les tendances que je perçois ou que j'attends sont liées aux domaines qui m'intéressent. Je ne vais donc pas m'essayer à prédire les grands évèments de 2008, mais plutôt énoncer ce que j'attends.

  • Les langages fonctionnels vont réellement commencer à être utilisés. Par réellement, j'entends de manière moins confidentielle. L'exemple le plus frappant est l'utilisation d'Erlang pour le service SimpleDB d'Amazon AWS[1]. Les capacités fontionnelles de certains langages[2] très appréciés pour le développement agile comme Ruby et Python (pour ne citer qu'eux) sont indéniablement très pratiques et rendent plus productif (et plus succinct, exemple : les list comprehension en Python). Le style fonctionnel dans ces langages est partiel, on trouve en effet des effets de bord. Avec la vogue des architectures multicore et la nécessité de faire du calcul parallèle (distribué ou multithread local), les langages fonctionnels sont très adaptés. Une raison simple à cela, ils sont fondés (pour les langages fonctionnels purs c'est même imposé) sur l'absence d'effet de bord. Par conséquent la concurrence est implémentée avec des processus qui ne partagent pas de mémoire et communique de manière asynchrone par passage de messages. C'est le style fonctionnel qui amène à cela. On trouve une bonne illustration de ce principe dans une description d'Erlang et de la raison de son succès récent What's all this fuss about Erlang? par Joe Amstrong.


C'est toujours difficile de choisir un langage de programmation quand on se lance dans un projet. Plusieurs approche se présentent : choisir celui qu'on maîtrise le mieux d'où la proéminence du C/C++, .Net, PHP et Java; choisir celui pour lequel on aura le plus de contributeurs ou développeurs à embaucher (qui a parlé de Java ?? ;) ); choisir les langages les plus appropriés pour traiter chaque composant du projet. hmmm oui vous avez bien lu LES langages. Alors bien sûr en pratique ça finit souvent par un langage, mais il n'est pas proscrit d'envisager l'utilisation de plusieurs langages. C'est d'ailleurs ce que pas mal de projets font déjà depuis longtemps en ajoutant la possibilité d'utiliser des langages de scripts[3] dans les applications. Paul Graham mets en avant ce choix dans son essai Beating the Averages. Certains y voit l'apologie de Lisp, j'y vois surtout la mise en exergue de ce qui constitue un des avantages majeurs d'une startup sur ces concurrents : le socle technologique. Il faut batir sur de bonnes fondations, celles qui permettront de ne pas perdre de temps et de répondre à la demande. "Faut qu'ça scale!!!". Les gens qui créés des entreprises sont souvent intelligents et l'équipe technique compétente. Ce qui va faire la différence, outre les choix stratégiques, sont les choix qui vont permettre d'aller plus vite et de faire mieux. Ca n'empêche pas d'avoir des startups qui marchent en utilisant du Java, mais certains, comme Frank Sommers, se posent des questions sur l'utilisation du langage dans l'efficacité d'un framework How Does Language Impact Framework Design?. Le seul élément qui n'est pas extensible c'est le temps. Ensuite la grosse question est qu'est-ce qu'un bon langage ? Qu'est-ce qu'une bonne technologie ? Et la chacun a sa réponse en fonction de ses besoins, de son expérience et de son humeur. The Hundred-Year Language de Paul Graham[4] est une réflexion parmi d'autres sur ce point.

  • Le logiciel libre sur l'embarqué grand public et les téléphones mobiles va se généraliser : Google Android, OpenMoko, The BUG (qui a été gratifié d'un CNET Award au CES et massivement couvert par la presse spécialisée récemment). Je me demande comment va réagir Archos au projet OpenPMA. Soit ils le font ala Apple en essayant de tout vérouiller - ce serait vraiment moche -, soit ils décident de créer une communauté autour de leur produit et de leur plateforme logiciel. C'est un modèle économique différent car actuellement ils vendent des plugins et ouvrir la plateforme logicielle permettrait d'avoir des alternatives à leurs plugins propriétaires et donc ne pas les acheter. Cela peut constituer un pari intéressant sur l'innovation et permettre de rattraper le retard d'Archos sur Apple notamment sur la partie interface utilisateur -- pour le reste difficile de parler de retard. J'aimerais bien un PMP qui sache lire le MKV !

Notes

[1] Pourquoi Amazon a choisit erlang pour SimpleDB. J'ai une piste ici -- bien que je ne connaisse pas les détails d'implémentations de SimpleDB notamment le moteur de base de données : "Mnesia - Base de donnée temps réel distribuée pour Erlang. Mnesia supporte la réplication en mémoire vive (RAM) aussi bien que le stockage sur disque, permet la modification dynamique des schémas et permet de stocker des structures de données d'une complexité arbitraire. Mnesia est très rapide car fonctionne dans le même espace d'adressage que les applications qui l'utilise: cette caractéristique est possible, car Mnesia et les programmes qui l'utilise sont écrits en Erlang. Mnesia est un bon exemple de la puissance d'Erlang: Dans combien de langage pourriez-vous écrire un SGBD distribué, complet et de qualité industrielle en moins de 20 000 lignes de code." (extrait de Livre blanc: Le langage Erlang.

[2] Can Your Programming Language Do This?

[3] lua, perl, python, clisp me viennent en tête

[4] Deux essais cités de lui, vous allez croire que je suis fan ! Et bien pas spécialement, c'est juste que je lis Hackers and Painters en ce moment, et que son expérience est intéressante.

Monday, December 24 2007

Bonnes fêtes ! Et un peu de teasing pour 2008 ;)

Nous sommes en pleine période de fêtes de fin d'années. Entre la course aux cadeaux et les expéditions pour voir tout le monde, le temps passe vite ! Pour ceux qui lisent ce blog et que je n'aurais pas l'occasion de voir, je vous souhaite de passer de très bonnes fêtes de fin d'années. Beaucoup de courage pour ceux qui doivent travailler le soir du réveillon et/ou le jour de Noël et qui n'ont pas pris de congés.

Nous ne sommes pas encore en 2008, mais je vais décrire un peu ce qui attend ce blog au début de l'année.

  • Un redesign complet : ce blog en a bien besoin ! J'avais repris le thème deep_green, de Carnegie. Et au final j'ai complètement changé les couleurs (le thème était au départ vert sur noir...). Donc oui ça ne servait à rien de prendre ce thème :p. Je vais donc reprendre ça from scratch et apprendre à utiliser Inkscape.
  • La suite, enfin la ré-écriture plutôt, de la réflexion sur l'avenir des applications web libres. J'ai une ébauche bien avancée de la structure et des notes de côté. Après avoir relu le billet que j'avais écrit je ne suis pas satisfait : c'est pas très clair et j'ai du mal à poursuivre la réflexion à partir de ça. Je vais donc prendre le temps - car je trouve que le sujet le mérite - et mettre l'essai en ligne courant janvier.
  • Une présentation d'une application web écrite avec Django. Je n'en dis pas plus pour le moment :).
  • + de billets et surtout plus régulièrement. C'est probablement la résolution que l'on trouve le plus souvent chez bloggeurs, je vais essayer de m'y tenir !

Friday, December 7 2007

Le financement des services web gratuits par la pub

Ce billet est une tentative de réponse à la question soulevée par GML, Le web gratuit a-t-il un avenir ?. Après éclaircissement de sa part, je me suis rendu compte que j'avais mal compris l'hypothèse qu'il avançait. Je vais essayer de reprendre dans le bon sens ici :).

Continue reading...

Thursday, December 6 2007

Remember VisiCalc!

And other oldies ;). I am reading Founders at Work: Stories of Startups' Early Days and one of the stories is about Dan Bricklin and the early days of Software Arts, which he co-founded with Bob Frankston. On his website, he details the history of Software Arts and VisiCalc. VisiCalc was _the_ first spreadsheet software (1-2-3 followed just after). Bob tells how Implementing VisiCalc.

I have not yet finished the book, but I already learned a lot from the first stories. I think there is a lot to learn in this book from the story of such legendary startups (see the TOC for the list).

Pour les francophones, j'ai découvert AnteMemoire TV, une émission qui retrace l'histoire de l'informatique à travers des personnes, logiciels ou matériels connus et qui ont marqué leur temps. Cela fait partie d'un projet plus globale de musée de l'informatique. L'émission AnteMemoire TV #6 parle de VisiCalc (c'est le sujet du billet quand même !!).

Dédicace spéciale à Stéphane !!! A quand une démo sur l'Apple II ? ;)

[update] Comme quoi on se refait pas, Dan a fondé Software Garden et développé WikiCalc que l'on peut voir à l'oeuvre dans cette demo (screencast en flash).

TDD: Does writing software backwards really improve quality?

If you have adopted agile development methods, or even just interested in them, Dr. Dobb's published an article Test Driven Development: Does writing software backwards really improve quality? where they tried to evaluate if Test Driven Development (TDD) really improves code quality. The article shows that TDD helps to have less critical (none where found by the QA in the article's case) bugs and less bugs in general. The developer's feedback - the one who wrote the code used in the evaluation - is worth the reading:

  • The TDD code was refactored several times during development. Methods were created, then changed, and then changed again with each revision, resulting in code that was tighter or clearer. The developer felt like the code went through an extensive proofreading cycle similar to what is done for newspapers, magazines, or the like.
  • There was a freedom of experimentation that led to better design decisions. Once the first working version of a class method was completed and properly tested, the developer could then try new design ideas. The unit tests quickly confirmed or denied that the new code worked, providing a digital safety net.
  • On a number of occasions, the developer found that the TDD method forced him to slow down and think more carefully about what he was trying to accomplish. Rather than just banging out code to get the job done, he focused on writing high quality code.

This encourage me to try it in my current projects :). As they say in the introduction, writing tests before the code is not so natural ;) at first sight, but it could be fine to spend less time on bug squashing by taking some additional time to write the unit tests before.

Wednesday, December 5 2007

I like this king of BUG!

BUG_Logo_whiteBack_sm.jpg Do you know Buglabs? Because I can't wait to see their BUG!! To quote the site: "BUG is a collection of easy-to-use, open source hardware modules, each capable of producing one or more Web services. These modules snap together physically and the services connect together logically to enable users to easily build, program and share innovative devices and applications.". The first modules they'll release are the GPS, videocam, touch sensitive LCD screen and accelerometer/motion sensor. The SDK is based on Eclipse and will be freely available. It aims to be an entirely opensource project (like the Chumby which is based on a linux stack and freely distributes the electronic schematics): "We are using Linux 2.6.19. In addition, the hardware schematics, BOMs and so forth will be made freely available to encourage users in forums and so on to hack, extend and enhance it (from #165 LinuxJournal)."

I'll hope they'll succeed. Currently nothing is actually available but it seems they made some demos in SF and NY. Opensource hardware is a huge thing though not so novel. Remember the beginning of Apple and the Homebrew Computer Club. Back to the source! Back to the garage! :)

- page 1 of 4