No es un bug grave, no parece intencional y no beneficia a Internet Explorer, pero la “Browser Ballot Screen” tiene un pequeño fallo al ordenar los navegadores y no es del todo aleatoria. Recordemos que la Comisión Europea obligó a Microsoft a ofrecer un mecanismo que permitiera elegir navegadores alternativos en Windows, y se optó por una web en la que se ofrecieran varias opciones en orden aleatorio.
El caso es que algunos navegadores aparecen con frecuencia en determinadas posiciones. Estas posiciones más probables dependen del navegador en el que se ejecute el código, y da lugar a algunas curiosidades. Por ejemplo, si usamos Internet Explorer, es muy probable que en la mitad de las ocasiones Explorer aparezca en quinta posición, Safari suele salir cuarto, y Chrome tiende a aparecer entre los tres primeros.
Si visitamos la Ballot Screen desde Firefox, Internet Explorer no suele salirse de las tres primeras posiciones, mientras que Safari tiende a salir el quinto. Mediante un simple análisis estadístico, se han comprobado estas probabilidades y se ha detectado que hay indicios de que la decisión no es tan aleatoria como debería ser.
Sin embargo, no parece ser algo intencional, porque no se entiende que Microsoft prefiera que Explorer aparezca el quinto para unos y entre los tres primeros para otros. Hay cuatro algoritmos de ordenación aleatoria bien conocidos: dos de ellos son buenos, uno es aceptable y otro es malo. Los ingenieros de Microsoft han elegido el malo.
En esta gráfica se muestran las probabilidades de que cada navegador aparezca en cada una de las posiciones, tras 10000 iteraciones ejecutando desde Internet Explorer. Se ve claramente la predilección de Explorer por la quinta posición y la de Safari por la cuarta.
Lo que hace el código JavaScript de la Ballot Screen es ordenar el array, pero utilizando una función de comparación personalizada. Se toman dos navegadores, se comparan, y el resultado indica si uno tiene que aparecer antes, en el mismo sitio, o después que el otro. El resultado de la comparación, en este caso, es aleatorio.
El problema es que esto no es consistente: Si Opera > Firefox y Firefox > Safari, entonces tendría que cumplirse automáticamente que Opera > Safari. Pero si nuestra comparación devuelve valores al tuntún, puede pasar que si los comparamos entre ellos obtengamos que Safari > Opera. En función de como se implemente JavaScript en cada navegador, esto produce que determinadas posiciones sean más frecuentes que otras (incluso bucles infinitos, ya puestos).
Tan sólo habría que utilizar alguno de los algoritmos “buenos” y listo, asunto resuelto, y la probabilidad de aparición en cada posición se igualaría. Parece triste que en un tema como este, Microsoft no se haya esmerado ni un mínimo en el código.
Actualizado: Microsoft ha modificado el algoritmo de la Browser Ballot para corregir el fallo. Ahora el orden aleatorio está más equilibrado. Esto confirma que sí, que era un fallo, pero también que Microsoft escucha las críticas y es rápida cuando se lo propone. Gracias a lesan por las pista.
</p><p>Vía | <a href="http://www.osnews.com/story/22939/Doing_the_Microsoft_Shuffle_Algorithm_Fail_in_Browser_Ballot">OS News</a>, <a href="http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html">Rob Weir</a><br />
Enlace | Browser Ballot Screen
En Genbeta | Los navegadores de la Ballot Screen de Windows vendrán ordenados al azar