/** * A simple set of functions to check our version 1.0 update service. * * @package WordPress * @since 2.3.0 */ /** * Check WordPress version against the newest version. * * The WordPress version, PHP version, and Locale is sent. Checks against the * WordPress server at api.wordpress.org server. Will only check if WordPress * isn't installing. * * @since 2.3.0 * @uses $wp_version Used to check against the newest WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @param bool $force_check Whether to bypass the transient cache and force a fresh update check. Defaults to false, true if $extra_stats is set. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_version_check( $extra_stats = array(), $force_check = false ) { if ( defined('WP_INSTALLING') ) return; global $wpdb, $wp_local_package; include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $php_version = phpversion(); $current = get_site_transient( 'update_core' ); $translations = wp_get_installed_translations( 'core' ); // Invalidate the transient when $wp_version changes if ( is_object( $current ) && $wp_version != $current->version_checked ) $current = false; if ( ! is_object($current) ) { $current = new stdClass; $current->updates = array(); $current->version_checked = $wp_version; } if ( ! empty( $extra_stats ) ) $force_check = true; // Wait 60 seconds between multiple version check requests $timeout = 60; $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( ! $force_check && $time_not_changed ) return false; $locale = get_locale(); /** * Filter the locale requested for WordPress core translations. * * @since 2.8.0 * * @param string $locale Current locale. */ $locale = apply_filters( 'core_version_check_locale', $locale ); // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_core', $current ); if ( method_exists( $wpdb, 'db_version' ) ) $mysql_version = preg_replace('/[^0-9.].*/', '', $wpdb->db_version()); else $mysql_version = 'N/A'; if ( is_multisite() ) { $user_count = get_user_count(); $num_blogs = get_blog_count(); $wp_install = network_site_url(); $multisite_enabled = 1; } else { $user_count = count_users(); $user_count = $user_count['total_users']; $multisite_enabled = 0; $num_blogs = 1; $wp_install = home_url( '/' ); } $query = array( 'version' => $wp_version, 'php' => $php_version, 'locale' => $locale, 'mysql' => $mysql_version, 'local_package' => isset( $wp_local_package ) ? $wp_local_package : '', 'blogs' => $num_blogs, 'users' => $user_count, 'multisite_enabled' => $multisite_enabled, ); $post_body = array( 'translations' => json_encode( $translations ), ); if ( is_array( $extra_stats ) ) $post_body = array_merge( $post_body, $extra_stats ); $url = $http_url = 'http://api.wordpress.org/core/version-check/1.7/?' . http_build_query( $query, null, '&' ); if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $options = array( 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), 'headers' => array( 'wp_install' => $wp_install, 'wp_blog' => home_url( '/' ) ), 'body' => $post_body, ); $response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) return false; $body = trim( wp_remote_retrieve_body( $response ) ); $body = json_decode( $body, true ); if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) return false; $offers = $body['offers']; foreach ( $offers as &$offer ) { foreach ( $offer as $offer_key => $value ) { if ( 'packages' == $offer_key ) $offer['packages'] = (object) array_intersect_key( array_map( 'esc_url', $offer['packages'] ), array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial', 'rollback' ), '' ) ); elseif ( 'download' == $offer_key ) $offer['download'] = esc_url( $value ); else $offer[ $offer_key ] = esc_html( $value ); } $offer = (object) array_intersect_key( $offer, array_fill_keys( array( 'response', 'download', 'locale', 'packages', 'current', 'version', 'php_version', 'mysql_version', 'new_bundled', 'partial_version', 'notify_email', 'support_email' ), '' ) ); } $updates = new stdClass(); $updates->updates = $offers; $updates->last_checked = time(); $updates->version_checked = $wp_version; if ( isset( $body['translations'] ) ) $updates->translations = $body['translations']; set_site_transient( 'update_core', $updates ); if ( ! empty( $body['ttl'] ) ) { $ttl = (int) $body['ttl']; if ( $ttl && ( time() + $ttl < wp_next_scheduled( 'wp_version_check' ) ) ) { // Queue an event to re-run the update check in $ttl seconds. wp_schedule_single_event( time() + $ttl, 'wp_version_check' ); } } // Trigger a background updates check if running non-interactively, and we weren't called from the update handler. if ( defined( 'DOING_CRON' ) && DOING_CRON && ! doing_action( 'wp_maybe_auto_update' ) ) { do_action( 'wp_maybe_auto_update' ); } } /** * Check plugin versions against the latest versions hosted on WordPress.org. * * The WordPress version, PHP version, and Locale is sent along with a list of * all plugins installed. Checks against the WordPress server at * api.wordpress.org. Will only check if WordPress isn't installing. * * @since 2.3.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_plugins( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined('WP_INSTALLING') ) return false; // If running blog-side, bail unless we've not checked in the last 12 hours if ( !function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); $plugins = get_plugins(); $translations = wp_get_installed_translations( 'plugins' ); $active = get_option( 'active_plugins', array() ); $current = get_site_transient( 'update_plugins' ); if ( ! is_object($current) ) $current = new stdClass; $new_option = new stdClass; $new_option->last_checked = time(); // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-plugins.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $plugin_changed = false; foreach ( $plugins as $file => $p ) { $new_option->checked[ $file ] = $p['Version']; if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) ) $plugin_changed = true; } if ( isset ( $current->response ) && is_array( $current->response ) ) { foreach ( $current->response as $plugin_file => $update_details ) { if ( ! isset($plugins[ $plugin_file ]) ) { $plugin_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $plugin_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_plugins', $current ); $to_send = compact( 'plugins', 'active' ); $locales = array( get_locale() ); /** * Filter the locales requested for plugin translations. * * @since 3.7.0 * * @param array $locales Plugin locale. Default is current locale of the site. */ $locales = apply_filters( 'plugins_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 plugins $timeout = 3 + (int) ( count( $plugins ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'plugins' => json_encode( $to_send ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), 'all' => json_encode( true ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/plugins/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); foreach ( $response['plugins'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); foreach ( $response['no_update'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); if ( is_array( $response ) ) { $new_option->response = $response['plugins']; $new_option->translations = $response['translations']; // TODO: Perhaps better to store no_update in a separate transient with an expiry? $new_option->no_update = $response['no_update']; } else { $new_option->response = array(); $new_option->translations = array(); $new_option->no_update = array(); } set_site_transient( 'update_plugins', $new_option ); } /** * Check theme versions against the latest versions hosted on WordPress.org. * * A list of all themes installed in sent to WP. Checks against the * WordPress server at api.wordpress.org. Will only check if WordPress isn't * installing. * * @since 2.7.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_themes( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined( 'WP_INSTALLING' ) ) return false; $installed_themes = wp_get_themes(); $translations = wp_get_installed_translations( 'themes' ); $last_update = get_site_transient( 'update_themes' ); if ( ! is_object($last_update) ) $last_update = new stdClass; $themes = $checked = $request = array(); // Put slug of current theme into request. $request['active'] = get_option( 'stylesheet' ); foreach ( $installed_themes as $theme ) { $checked[ $theme->get_stylesheet() ] = $theme->get('Version'); $themes[ $theme->get_stylesheet() ] = array( 'Name' => $theme->get('Name'), 'Title' => $theme->get('Name'), 'Version' => $theme->get('Version'), 'Author' => $theme->get('Author'), 'Author URI' => $theme->get('AuthorURI'), 'Template' => $theme->get_template(), 'Stylesheet' => $theme->get_stylesheet(), ); } // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-themes.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time() - $last_update->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $theme_changed = false; foreach ( $checked as $slug => $v ) { if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) ) $theme_changed = true; } if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) { foreach ( $last_update->response as $slug => $update_details ) { if ( ! isset($checked[ $slug ]) ) { $theme_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $theme_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $last_update->last_checked = time(); set_site_transient( 'update_themes', $last_update ); $request['themes'] = $themes; $locales = array( get_locale() ); /** * Filter the locales requested for theme translations. * * @since 3.7.0 * * @param array $locales Theme locale. Default is current locale of the site. */ $locales = apply_filters( 'themes_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 themes $timeout = 3 + (int) ( count( $themes ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'themes' => json_encode( $request ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/themes/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $new_update = new stdClass; $new_update->last_checked = time(); $new_update->checked = $checked; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); if ( is_array( $response ) ) { $new_update->response = $response['themes']; $new_update->translations = $response['translations']; } set_site_transient( 'update_themes', $new_update ); } /** * Performs WordPress automatic background updates. * * @since 3.7.0 */ function wp_maybe_auto_update() { include_once( ABSPATH . '/wp-admin/includes/admin.php' ); include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ); $upgrader = new WP_Automatic_Updater; $upgrader->run(); } /** * Retrieves a list of all language updates available. * * @since 3.7.0 */ function wp_get_translation_updates() { $updates = array(); $transients = array( 'update_core' => 'core', 'update_plugins' => 'plugin', 'update_themes' => 'theme' ); foreach ( $transients as $transient => $type ) { $transient = get_site_transient( $transient ); if ( empty( $transient->translations ) ) continue; foreach ( $transient->translations as $translation ) { $updates[] = (object) $translation; } } return $updates; } /** * Collect counts and UI strings for available updates * * @since 3.3.0 * * @return array */ function wp_get_update_data() { $counts = array( 'plugins' => 0, 'themes' => 0, 'wordpress' => 0, 'translations' => 0 ); if ( $plugins = current_user_can( 'update_plugins' ) ) { $update_plugins = get_site_transient( 'update_plugins' ); if ( ! empty( $update_plugins->response ) ) $counts['plugins'] = count( $update_plugins->response ); } if ( $themes = current_user_can( 'update_themes' ) ) { $update_themes = get_site_transient( 'update_themes' ); if ( ! empty( $update_themes->response ) ) $counts['themes'] = count( $update_themes->response ); } if ( ( $core = current_user_can( 'update_core' ) ) && function_exists( 'get_core_updates' ) ) { $update_wordpress = get_core_updates( array('dismissed' => false) ); if ( ! empty( $update_wordpress ) && ! in_array( $update_wordpress[0]->response, array('development', 'latest') ) && current_user_can('update_core') ) $counts['wordpress'] = 1; } if ( ( $core || $plugins || $themes ) && wp_get_translation_updates() ) $counts['translations'] = 1; $counts['total'] = $counts['plugins'] + $counts['themes'] + $counts['wordpress'] + $counts['translations']; $titles = array(); if ( $counts['wordpress'] ) $titles['wordpress'] = sprintf( __( '%d WordPress Update'), $counts['wordpress'] ); if ( $counts['plugins'] ) $titles['plugins'] = sprintf( _n( '%d Plugin Update', '%d Plugin Updates', $counts['plugins'] ), $counts['plugins'] ); if ( $counts['themes'] ) $titles['themes'] = sprintf( _n( '%d Theme Update', '%d Theme Updates', $counts['themes'] ), $counts['themes'] ); if ( $counts['translations'] ) $titles['translations'] = __( 'Translation Updates' ); $update_title = $titles ? esc_attr( implode( ', ', $titles ) ) : ''; $update_data = array( 'counts' => $counts, 'title' => $update_title ); /** * Filter the returned array of update data for plugins, themes, and WordPress core. * * @since 3.5.0 * * @param array $update_data { * Fetched update data. * * @type array $counts An array of counts for available plugin, theme, and WordPress updates. * @type string $update_title Titles of available updates. * } * @param array $titles An array of update counts and UI strings for available updates. */ return apply_filters( 'wp_get_update_data', $update_data, $titles ); } function _maybe_update_core() { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $current = get_site_transient( 'update_core' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) && isset( $current->version_checked ) && $current->version_checked == $wp_version ) return; wp_version_check(); } /** * Check the last time plugins were run before checking plugin versions. * * This might have been backported to WordPress 2.6.1 for performance reasons. * This is used for the wp-admin to check only so often instead of every page * load. * * @since 2.7.0 * @access private */ function _maybe_update_plugins() { $current = get_site_transient( 'update_plugins' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_plugins(); } /** * Check themes versions only after a duration of time. * * This is for performance reasons to make sure that on the theme version * checker is not run on every page load. * * @since 2.7.0 * @access private */ function _maybe_update_themes() { $current = get_site_transient( 'update_themes' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_themes(); } /** * Schedule core, theme, and plugin update checks. * * @since 3.1.0 */ function wp_schedule_update_checks() { if ( !wp_next_scheduled('wp_version_check') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_version_check'); if ( !wp_next_scheduled('wp_update_plugins') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_plugins'); if ( !wp_next_scheduled('wp_update_themes') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_themes'); if ( ( wp_next_scheduled( 'wp_maybe_auto_update' ) > ( time() + HOUR_IN_SECONDS ) ) && ! defined('WP_INSTALLING') ) wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); } if ( ( ! is_main_site() && ! is_network_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) return; add_action( 'admin_init', '_maybe_update_core' ); add_action( 'wp_version_check', 'wp_version_check' ); add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 ); add_action( 'load-plugins.php', 'wp_update_plugins' ); add_action( 'load-update.php', 'wp_update_plugins' ); add_action( 'load-update-core.php', 'wp_update_plugins' ); add_action( 'admin_init', '_maybe_update_plugins' ); add_action( 'wp_update_plugins', 'wp_update_plugins' ); add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 ); add_action( 'load-themes.php', 'wp_update_themes' ); add_action( 'load-update.php', 'wp_update_themes' ); add_action( 'load-update-core.php', 'wp_update_themes' ); add_action( 'admin_init', '_maybe_update_themes' ); add_action( 'wp_update_themes', 'wp_update_themes' ); add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 ); add_action( 'wp_maybe_auto_update', 'wp_maybe_auto_update' ); add_action('init', 'wp_schedule_update_checks'); Malí: Cuando la seguridad colectiva es demasiado lentaSesiónDeControl.com
Arrow

La lenta seguridad colectiva


0
GuinGuinBali

Este artículo ha sido escrito en GuinGuinBali, un portal de comunicación especializado en África Occidental y la Macaronesia con corresponsales en varios países de la región y en otros puntos de Europa relevantes para la actualidad africana.


Escrito el 24 de febrero de 2013 a las 13:17 | Clasificado en África

Los mecanismos de seguridad colectiva, esos destinados a prevenir y atajar agresiones a los estados miembros, han fallado en Mali.

Dos guerrilleros sostienen una bandera de Mali (Fuente: GuinGuinBali)
Dos guerrilleros sostienen una bandera de Mali (Fuente: GuinGuinBali)

El conflicto en Malí ha puesto a examen la seguridad colectiva, tanto a nivel global como a nivel regional en lo que respecta a la Comunidad Económica de Estados de África Occidental (CEDEAO). El objetivo es evaluar si los mecanismos de seguridad colectiva pueden prevenir y gestionar crisis de manera eficaz. En este sentido, la intervención de Francia en Malí no permite albergar expectativas halagüeñas.

Por ello, es preciso examinar cómo opera la seguridad colectiva y analizar las particularidades de la intervención original que en su día planeó la CEDEAO. Reflexionar sobre este asunto nos ayudará a entender mejor las perspectivas de la seguridad colectiva, global y regional, como mecanismo de gobernanza en materia de seguridad.

La seguridad colectiva pretende prevenir el conflicto armado y, si finalmente ocurre, ponerle fin de manera rápida. Se basa en la idea de que ninguna agresión contra un estado miembro del régimen de seguridad colectiva será tolerada. Si ocurre una agresión, los estados deben apoyar a la víctima y organizar una fuerza militar de un poder imparable, capaz de infligir un golpe rápido y definitivo al agresor. Con ello, este verá frustradas sus operaciones y quedará disuadido para no volver a repetir su comportamiento.

Dicho esto, debe quedar bien claro que la respuesta contra el actor problemático debe ser rápida –nótese que nos referimos a “actor” y no a “estado”-. Sin una reacción oportuna que llegue a tiempo, no existen garantías de que los intereses fundamentales de seguridad del estado agredido, como pueden ser su soberanía, su integridad territorial o su capacidad militar, no se vean dañados hasta un punto de no retorno.

Si esto ocurre, el régimen de seguridad colectiva no sólo habrá fallado, sino que empezará a ser visto por sus miembros como poco o nada fiable. Ante esta situación, los estados pueden decidir simplemente abandonar dicho régimen y confiar únicamente en sus propias capacidades para garantizar su seguridad.

Cuando pensamos en el caso maliense, la seguridad colectiva tiene un plano global y otro regional, puesto que se basa en dos organizaciones internacionales diferentes: Naciones Unidas, a través de su Consejo de Seguridad, y la CEDEAO.

Llegados a este punto ya podemos presentar una conclusión, a saber: estas instituciones, al igual que el derecho internacional, no están correctamente diseñadas para decidir y actuar frente a agresiones que se originen dentro del propio estado por parte de ejércitos irregulares, como el que se opone al gobierno de Bamako.

La naturaleza no estatal del agresor complica la cuestión, ya que afecta al rango de políticas disponibles y, lo que es más importante, reduce la urgencia que los estados atribuyen a la crisis.

Tras el golpe de estado de marzo de 2012, ha habido un notable conflicto político en Malí. El ejército y los miembros del gobierno civil interino han mantenido posiciones enfrentadas acerca de la necesidad de intervención externa, a la en principio los militares se oponía. Finalmente, durante el otoño pasado, políticos clave malienses, entre ellos el presidente interino Dioncounda Traore, solicitaron la intervención de la CEDEAO.

Esta fue una decisión razonable, dado la nada despreciable fuerza de los rebeldes y la debilidad del ejército maliense. A su vez, el compromiso de este respecto a la restauración de la normalidad democrática no está claro y atrae sospechas.

Ahora viene lo curioso del asunto. Desde que los rebeldes capturaron el norte Malí en abril del año pasado, la CEDEAO se mostró dispuesta a intervenir. El consejo de Seguridad, con su resolución 2085 (20 de diciembre de 2012) le dio luz verde, pero no sin antes retrasar su decisión para que la CEDEAO presentase un plan de intervención claro.

La mayoría de los vecinos de Malí demuestran una profunda preocupación en relación con la amenaza que suponen los rebeldes, y esto es una opinión compartida por poderes occidentales como el Reino Unido, Francia y Estados Unidos.

Con todo esto en mente, no deja de resultar sorprendente que la intervención de la CEDEAO, de acuerdo con el planteamiento original, no habría tenido lugar antes de septiembre de 2013. Un retraso tan grande es precisamente lo que ha causado el fracaso parcial de la seguridad colectiva en la crisis de Malí y lo que estremece la lógica profunda de la seguridad colectiva.

La mayoría de los vecinos de Malí demuestran una profunda preocupación en relación con la amenaza que suponen los rebeldes, y esto es una opinión compartida por poderes occidentales como el Reino Unido, Francia y Estados Unidos.

Es un hecho que una determinado política siempre puede desvirtuarse cuando es el momento de hacerla efectiva, y esto ciertamente se aplica al caso que estudiamos. Bastante antes de la resolución del Consejo de Seguridad existía un consenso internacional claro acerca de la necesidad intervenir. Se trataba de uno de esos extraños momento en la política internacional en el que casi todos los actores relevantes están de acuerdo, al menos a la hora de decidir qué hacer.

Sin embargo, por aquel entonces ya había signos de que ciertos estados podrían escoger escurrir el bulto a la hora de la verdad. Cuando el secretario general de Naciones Unidas Ban Ki-Moon expresó sólo un apoyo condicional a la CEDEAO y declaró que no habría ningún respaldo financiero estaba actuando tácitamente como el portavoz de estados poco comprometidos con la empresa. Por lo tanto la autorización del Consejo de Seguridad supuso poca más que un sello de aprobación a la intervención. A pesar de su importancia, este requisito legal es solamente uno de los elementos de la seguridad colectiva, pero no su esencia.

Por consiguiente, la carga de asistir al ejército maliense para fortalecer su posición en el sur y, eventualmente, reconquistar el norte, recaía fundamental en la CEDEAO. Supuestamente, otros estados, como Francia, tendrían únicamente un papel de apoyo.

En teoría, encargar a una organización internacional como la CEDEAO que lleve a cabo el trabajo no es extraño; se ha hecho con la OTAN en otras ocasiones. El problema se da cuando quien tiene que desarrollar la tarea encomendada tiene que juntar primero una fuerza eficaz y bien organizada capaz de cumplir los objetivos. Es entonces cuando la implementación de la política se convierte en una cuestión peliaguda que puede afectar a la velocidad con la que se materializa la política.

La CEDEAO agrupa a 16 estados de África noroccidental, entre los cuales Nigeria es sin duda el más importante en términos militares. Sin embargo, el ejército nigeriano no está convenientemente preparado para afrontar una operación de alto nivel como la que se plantea en el norte de Malí.

Aparte, estados como Mauritania y Argelia, aunque no son miembros de la CEDEAO, son muy relevantes para la implementación de cualquier política referida al asunto. Todo esto conduce a un largo proceso para decidir quién aporta qué al esfuerzo común –por ejemplo, número de tropas-. El resultado es un peligroso retraso en el desarrollo efectivo de la política.

Incluso si asumimos septiembre del 2013 como inicio de la intervención, desde la autorización de la misma habrían pasado nueve meses. Esto es tiempo suficiente para que el oponente planee, organice e intente alcanzar sus objetivos o, al menos, mejorar su posición militar para hacer la intervención más difícil y costosa, tanto material como políticamente. En definitiva, cada día sin actuar implica que la seguridad colectiva pierde su habilidad de frenar amenazas presentes o futuras; cada día sin acción supone una ventaja para el agresor.

Desde esta lógica podemos entender el avance rebelde hacia el sur de mediados de enero. Podrían haber llegado a Bamako si su movimiento no hubiese desencadenado la reacción de Francia, en sí misma una respuesta a la llamada de socorro del presidente maliense.

La autorización del Consejo de Seguridad supuso poca más que un sello de aprobación a la intervención. A pesar de su importancia, este requisito legal es solamente uno de los elementos de la seguridad colectiva, pero no su esencia.

La intervención de París cambia fundamentalmente la situación y la enmarca fuera de lo que se entiende propiamente por seguridad colectiva. Aunque es cierto que la CEDEAO ahora desplegará sus tropas más pronto para ayudar a Francia y a los malienses, para ello ha sido necesario que un poderoso estado no regional se involucre y asuma los riesgos iniciales.

Del mismo modo, el Consejo de Seguridad e, individualmente, Londres y Washington han respaldado la decisión del presidente francés François Hollande, pero esto no oculta el hecho de que todo se parece más a las viejas –o no tan viejas- maneras de hacer las cosas, y no a la seguridad colectiva.

En el largo plazo, y a pesar de las dificultades que plantea la misión, todo el que temía la posibilidad de que el norte de Malí se convirtiese en un refugio para terroristas se beneficiará de la intervención francesa y de su asistencia a la CEDEAO. Sin embargo, la satisfacción del interés común no ha sido más que el resultado de la búsqueda por parte de París de su propio interés.

Si Francia no hubiese tenido preocupaciones postcoloniales en Malí, la inacción habría resultado en consecuencias muy negativas. Los intereses geoestratégicos y energéticos franceses han sido la motivación fundamental del país para intervenir, no la seguridad colectiva en sentido amplio.

Lo anterior no significa que la seguridad colectiva como mecanismo de gobernanza esté condenada al fracaso. Puede funcionar, como durante los noventa probaron las pasadas intervenciones, de perfil bajo, de la CEDEAO. Pero para afrontar retos como el de Malí, los acuerdos regionales de seguridad colectiva deben mejorarse de dos formas diferentes, aunque complementarias. Obviamente, es necesario invertir en las estructuras y herramientas necesarias.

La creación por parte de la CEDEAO de una fuerza de acción rápida es indispensable si la organización quiere garantizar la seguridad en la región. Sin embargo, esto será complicado si no se acompaña de iniciativas para reafirmar entre los estados de la región la idea de que pertenecen a una comunidad de seguridad. Sin valores compartidos que promuevan la lealtad a las estructuras de seguridad, los regateos en torno a costes materiales probablemente seguirán comprometiendo políticas de seguridad.

FuenteMalí: Cuando la seguridad colectiva es demasiado lenta

Autor: Alberto Pérez Vadillo

Comparte tu punto de vista

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>