Reading/Web/MobileFrontend and Minerva

MobileFrontend currently does lots of things. This causes confusion. Here, I hope to shed light on how the extension is architected.

What does installing MobileFrontend do?
Installing MobileFrontend currently has several outcomes:
 * It ships various new experiences and capabilities such as:
 * the ability to render Wikidata descriptions in skins
 * The Special:Nearby page
 * The Special:Upload page
 * It adds a Special:MobileOptions page to allow anonymous users to configure device specific options
 * For the record I don't think it should do any of these things.
 * It installs the MediaWiki Minerva skin which can be installed as a desktop or mobile skin
 * It sets up an infrastructure for sites managing a separate mobile and desktop experience
 * A temporary ResourceLoader "targets" system to limit JavaScript/CSS that can make it onto mobile browsers
 * It allows you to default to a different skin on a mobile domain via MFDefaultSkinClass. This is useful for wikis who are trying to migrate from an existing desktop friendly MediaWiki instance to a mobile friendly instance and want to migrate slowly.
 * The extension updates the footer of the skin to have a desktop view / mobile view link
 * Any request using DeviceDetection that is recognised as mobile will be shown the mobile skin
 * It allows you to transform the content you ship to mobile devices in the mobile skin
 * It provides a MobileFormatter class that transforms the HTML provided by the MediaWiki parser that has been created primarily for desktop users to make it render better on mobile.
 * It allows you to define css selectors of elements that are not mobile friendly and should be removed via the MFRemovableClasses configuration variable
 * It allows you to lazy load images in the mobile version of a skin MFLazyLoadImages
 * The ability to disable responsive images using MFStripResponsiveImages
 * You can blacklist pages via MFNoMobilePages to force desktop skin on pages which shouldn't be rendered on mobile.
 * The MobileFormatter class has special handling directed at the main page of Wikimedia projects via MFSpecialCaseMainPage. This is not helpful to 3rd parties.
 * There are experiments to lazy load references and move the first paragraph before the infobox.
 * It overrides various special pages in core with new mobile friendly versions include Special:Contributions, Special:Watchlist, Special:Preferences (unused), the history page (Special:MobileHistory)

tldr

 * MobileFrontend checks if you are in mobile or desktop mode.
 * In desktop mode nothing happens
 * In mobile mode it ships transformed mobile-friendly content to the configured mobile skin and redirects non-mobile friendly special pages to mobile friendly versions

Why it is not helpful to have them in the same repository...
It confuses our abstractions - we put Minerva specific code into MobileFrontend and vice versa.

For example the Vector mobile skin has lazy loaded image HTML but does not actually load the images via JavaScript

We are unclear/forget about the abstractions and use things that are not always available. This leads to bugs such as PHP warnings related to footer V2 when run Minerva in desktop mode and SkinMinerva and SkinMinervaBeta should not know about MobileContext

Outsiders see MobileFrontend as a big extension that does too much

That's because it's doing 3 things. This lack of understanding can lead to frustration/conflict. It actually hides the good work we've done.

We cut corners

By living in the same repo, MobileFrontend allows us to cut corners. Wikidata descriptions not in core? Stick them in MobileFrontend! Don't want to go through the hassle (security review, setup costs) of setting up a Nearby extension? Add it to MobileFrontend etc...

Lost opportunity for 3rd party mobile skins

It's probably not obvious to 3rd parties that they can change the mobile skin just like the desktop skin. It would be good to see non-Wikimedia looking mobile skins out in the wild. Wouldn't it?

... but why do we care about Minerva as a desktop skin?
'''because... as Morpheus from the Matrix might say... there is no "desktop" skin..'''

A skin should just be a skin. If we have the same mental model of what MobileFrontend and Minerva do differently, this should be obvious.

Some 3rd parties don't need MobileFrontend

but they would look mighty fine with a Minerva skin and all the design work that Nirzar has put in.

It keeps us accountable to the rest of the MediaWiki ecosystem

If we don't care, we should build a web app or an app that doesn't depend on MediaWiki and make that explicit, but while we are in this ecosystem we should play by the rules.

Encourages us to upstream

Where we hit issues we should solve them for everyone rather than just Mobilefrontend. This helps us when we build things like Page Previews.

Cost is low

The perceived cost might seem high, but if you reflect a little it isn't. We don't have many bugs about desktop Minerva. When we encounter issues, they are a little tricky to solve, but more of a nuisance than anything.

We get desktop features for free

Look! Minerva page previews!!!!