On Mon, Sep 26, 2011 at 8:13 AM, Olivier Beaton olivier.beaton@gmail.comwrote:
I've started a Request for comment on MW for the decorification of MW features into extensions. I am not talking about removing features that we distribute to our users. Simply how we include them in the mediawiki software (core vs extensions) especially now that our new installer allows us to package extensions in the distribution.
http://www.mediawiki.org/wiki/Requests_for_comment/decorify_into_extensions
I would appreciate hearing the community's thoughts on this. Even if you feel we're not at that point yet, ask yourself when you will be, and if it's better to start on a different path now.
Having sat in on some of today's IRC chat along these lines, my basic comments come down to:
* Broadly speaking, putting modular self-contained features in extensions is good practice * Bundling some extensions with the default installer is something I advocate
I tend to reject parts of your premise though: most Wikimedia/Wikipedia-specific work today is in fact already being done in extensions -- and they don't magically migrate to core, they actually mostly stay as extensions.
Allow me to list the extensions referenced in the config for all our Wikimedia sites, all of which are extensions and not in core:
include( $IP . '/extensions/PagedTiffHandler/PagedTiffHandler.php' ); include( $IP . '/extensions/timeline/Timeline.php' ); include( $IP . '/extensions/wikihiero/wikihiero.php' ); include( $IP . '/extensions/SiteMatrix/SiteMatrix.php' ); include( $IP . '/extensions/CharInsert/CharInsert.php' ); include( $IP . '/extensions/CheckUser/CheckUser.php' ); include( $IP . '/extensions/ParserFunctions/ParserFunctions.php' ); require( $IP . '/extensions/Cite/Cite.php' ); include( $IP . '/extensions/InputBox/InputBox.php' ); include( $IP . '/extensions/ExpandTemplates/ExpandTemplates.php' ); include( $IP . '/extensions/ImageMap/ImageMap.php' ); include( $IP . '/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php' ); include( $IP . '/extensions/DoubleWiki/DoubleWiki.php' ); include( $IP . '/extensions/Poem/Poem.php' ); include( $IP . '/extensions/UnicodeConverter/UnicodeConverter.php' ); require( $IP . '/extensions/CategoryTree/CategoryTree.php' ); include( $IP . '/extensions/ProofreadPage/ProofreadPage.php' ); include( $IP . '/extensions/LabeledSectionTransclusion/lst.php' ); include( $IP . '/extensions/SpamBlacklist/SpamBlacklist.php' ); include( $IP . '/extensions/UploadBlacklist/UploadBlacklist.php' ); include( $IP . '/extensions/TitleBlacklist/TitleBlacklist.php' ); include( "$IP/extensions/Quiz/Quiz.php" ); include( "$IP/extensions/Gadgets/Gadgets.php" ); include( $IP . '/extensions/OggHandler/OggHandler.php' ); include( $IP . '/extensions/AssertEdit/AssertEdit.php' ); include( "$IP/extensions/ContactPageFundraiser/ContactPage.php" ); include( "$IP/extensions/FormPreloadPostCache/FormPreloadPostCache.php" ); include( "$IP/extensions/SkinPerPage/SkinPerPage.php" ); include( "$IP/extensions/skins/Schulenburg/Schulenburg.php" ); include( "$IP/extensions/skins/Tomas/Tomas.php" ); include( "$IP/extensions/skins/Donate/Donate.php" ); include( "$IP/extensions/ContributionReporting/ContributionReporting.php" ); include( "$IP/extensions/ExtensionDistributor/ExtensionDistributor.php" ); include( $IP . '/extensions/GlobalBlocking/GlobalBlocking.php' ); include( $IP . '/extensions/TrustedXFF/TrustedXFF.php' ); include( $IP . '/extensions/ContactPage/ContactPage.php' ); include( $IP . '/extensions/SecurePoll/SecurePoll.php' ); include( "$IP/extensions/EmailCapture/EmailCapture.php" ); include "$IP/extensions/TitleKey/TitleKey.php"; include( $IP . '/extensions/OAI/OAIRepo.php' ); include( $IP . '/extensions/intersection/DynamicPageList.php' ); include( $IP . '/extensions/Renameuser/SpecialRenameuser.php' ); include( $IP . '/extensions/Nuke/SpecialNuke.php' ); include( "$IP/extensions/AntiBot/AntiBot.php" ); include( "$IP/extensions/TorBlock/TorBlock.php" ); include( "$IP/extensions/RSS/RSS.php" ); require( $IP . '/extensions/ScanSet/ScanSet.php' ); require( $IP . '/extensions/Cite/SpecialCite.php' ); require( "$IP/extensions/UserThrottle/UserThrottle.php" ); require( "$IP/extensions/ConfirmEdit/ConfirmEdit.php" ); require( "$IP/extensions/ConfirmEdit/FancyCaptcha.php" ); require( "$IP/extensions/Oversight/HideRevision.php" ); include $IP . '/extensions/AntiSpoof/AntiSpoof.php'; include "$IP/extensions/CentralAuth/CentralAuth.php"; require( "$IP/extensions/DismissableSiteNotice/DismissableSiteNotice.php" ); include "$IP/extensions/CentralNotice/CentralNotice.php"; include "$IP/extensions/WikimediaMessages/WikimediaMessages.php"; include "$IP/extensions/WikimediaMessages/WikimediaLicenseTexts.php"; include "$IP/extensions/SimpleAntiSpam/SimpleAntiSpam.php"; include "$IP/extensions/Collection/Collection.php"; include "$IP/extensions/NewUserMessage/NewUserMessage.php"; include "$IP/extensions/CodeReview/CodeReview.php"; include "$IP/extensions/AbuseFilter/AbuseFilter.php"; include ( "$IP/extensions/ClientSide/ClientSide.php" ); include ( "$IP/extensions/CommunityVoice/CommunityVoice.php" ); include ( "$IP/extensions/PdfHandler/PdfHandler.php" ); require( "$IP/extensions/Vector/Vector.php" ); require( "$IP/extensions/WikiEditor/WikiEditor.php" ); require_once( "$IP/extensions/PrefStats/PrefStats.php" ); require_once( "$IP/extensions/PrefSwitch/PrefSwitch.php" ); require "$IP/extensions/UserDailyContribs/UserDailyContribs.php"; require "$IP/extensions/ClickTracking/ClickTracking.php"; include "$IP/extensions/CustomUserSignup/CustomUserSignup.php"; require_once( "$IP/extensions/ReaderFeedback/ReaderFeedback.php" ); require_once( "$IP/extensions/LocalisationUpdate/LocalisationUpdate.php" ); require_once( "$IP/extensions/LandingCheck/LandingCheck.php" ); require "$IP/extensions/FundraiserPortal/FundraiserPortal.php"; require_once( "$IP/extensions/DonationInterface/donate_interface/donate_interface.php" ); require_once( "$IP/extensions/DonationInterface/payflowpro_gateway/payflowpro_gateway.php" ); require_once( "$IP/extensions/GlobalUsage/GlobalUsage.php" ); require_once( "$IP/extensions/ArticleFeedback/ArticleFeedback.php" ); require_once( "$IP/extensions/StrategyWiki/ActiveStrategy/ActiveStrategy.php" ); require_once( "$IP/extensions/CommunityHiring/CommunityHiring.php" ); require_once( "$IP/extensions/CommunityApplications/CommunityApplications.php" ); include( "$IP/extensions/VariablePage/VariablePage.php" ); include( "$IP/extensions/ContributionTracking/ContributionTracking.php" ); require_once( "$IP/extensions/UploadWizard/UploadWizard.php" ); require_once( "$IP/extensions/Narayam/Narayam.php" ); include( "$IP/extensions/GoogleNewsSitemap/GoogleNewsSitemap.php" ); require_once( "$IP/extensions/cldr/cldr.php" ); require_once( "$IP/extensions/DisableAccount/DisableAccount.php" ); require_once( "$IP/extensions/WikimediaIncubator/WikimediaIncubator.php" ); require_once( "$IP/extensions/WikiLove/WikiLove.php" ); require_once( "$IP/extensions/EditPageTracking/EditPageTracking.php" ); require_once( "$IP/extensions/MoodBar/MoodBar.php" ); require_once( "$IP/extensions/MobileFrontend/MobileFrontend.php" ); include( "$IP/extensions/SubPageList3/SubPageList3.php" ); require_once( "$IP/extensions/Math/Math.php" ); // Math move out from core in MW 1.18 require_once( "$IP/extensions/Babel/Babel.php" );
Things like LanguageConverter have been in MediaWiki for several years and date to younger times for the extension interface. Math wasn't broken out into an extension until 1.18 because it predates the extension interface entirely! Some also work along both language- and functional lines -- LanguageConverter could perhaps turn into its own module, but then where do we bundle the language rules?
In general, things that are infrastructural -- that provide bases for other things to work with -- are probably not unreasonable to leave where they are.
-- brion