[Gelistirici] 2009 ve paketler

Onur Küçük onur at pardus.org.tr
28 Oca 2009 Çar 19:41:24 EET


On Tue, 27 Jan 2009 21:04:18 +0100
Emre Erenoglu <erenoglu at gmail.com> wrote:

> 2009/1/27 Serbulent UNSAL <serbulent at pardus.org.tr>
> 
> >  > Hatta belki hataları sandbox ihlalleri, --as-needed hataları vb.
> > şeklinde
> > > ayrıştırabiliriz faydası olacağını düşünürseniz.
> >
> > [1] http://bugs.gentoo.org/show_bug.cgi?id=129413
> 
> 
> Valla tam anlamadim ben bu --as-needed olayini ve niye gerekli
> oldugunu, ama elbet sizler anlattikca anlariz. Ilk gordugum, amule
> paketinde denedim ve derleme basarisiz oluverdi :)

 Bu biraz da benim hatam, parametreyi alelacele yazmışım yanlış olmuş :)

 Normalde ld ye parametre verirken "ld --hede" şeklinde veriliyor,
ancak bu parametre gcc ile verilise (link işlemli gcc ile yapılırsa) 
-Wl,--hede  şeklinde gcc ye parametre vermek gerekiyor. LDFLAGS da bu
şekilde tanımlanmalı.

 Binutils de durum nedir diye biraz araştırdım. LDFLAGS ı şu şekilde
ayarlamayı düşünüyorum

ldflags = -Wl,-O1 -Wl,-z,relro -Wl,--hash-style=gnu -Wl,--as-needed
-Wl,--sort-common

 ld için "--enable-new-dtags" ı forced olacak şekilde binutils de
ayarlıyoruz, bunu yine binutils de tutmayı düşünüyorum. Ayrıca binutils
de Bdirect vb. bir iki değişiklik daha yapıyoruz, bunları değiştirmeyi
düşünmüyorum.

 --as-needed a gelince;

  normalde bir yazılımı belli bir kitaplık ile linklediğinizde, onun
linklendiği alt kitaplıklarla ve sizin linklenmesini istediğiniz bütün
kitaplıklarla linkleniyor (hepsi DT_NEED listesine giriyor). GNU linker
a --as-needed verdiğimizde yazılımlar kullandığı sembol listesine
bakılarak sadece ihtiyacı olan kitaplıklara direkt linklenecek,
anlamsızca "direkt olarak kullanmadığı" kitaplıklara linklenip sisteme
ekstra iş yükü getirmeyecek.

$ ldd -u -r gnome-mplayer-asneeded 
Unused direct dependencies:

$ ldd -u -r gnome-mplayer
Unused direct dependencies:                   

        /usr/lib/libatk-1.0.so.0
        /usr/lib/libpangocairo-1.0.so.0
        /usr/lib/libpango-1.0.so.0     
        /usr/lib/libcairo.so.2         
        /usr/lib/libgmodule-2.0.so.0   
        /lib/libdl.so.2                
        /lib/librt.so.1 

$ objdump -p gnome-mplayer|grep NEED
  NEEDED               libgtk-x11-2.0.so.0
  NEEDED               libgdk-x11-2.0.so.0
  NEEDED               libatk-1.0.so.0
  NEEDED               libgdk_pixbuf-2.0.so.0
  NEEDED               libpangocairo-1.0.so.0
  NEEDED               libpango-1.0.so.0
  NEEDED               libcairo.so.2
  NEEDED               libgobject-2.0.so.0
  NEEDED               libgmodule-2.0.so.0
  NEEDED               libdl.so.2
  NEEDED               libgthread-2.0.so.0
  NEEDED               librt.so.1
  NEEDED               libglib-2.0.so.0
  NEEDED               libgio-2.0.so.0
  NEEDED               libdbus-glib-1.so.2
  NEEDED               libdbus-1.so.3
  NEEDED               libasound.so.2
  NEEDED               libnotify.so.1
  NEEDED               libgpod.so.3
  NEEDED               libpthread.so.0
  NEEDED               libc.so.6
  VERNEED              0x0804d2d8
  VERNEEDNUM           0x00000003

$ objdump -p gnome-mplayer-asneeded|grep NEED
  NEEDED               libgtk-x11-2.0.so.0
  NEEDED               libgdk-x11-2.0.so.0
  NEEDED               libgdk_pixbuf-2.0.so.0
  NEEDED               libgobject-2.0.so.0
  NEEDED               libgthread-2.0.so.0
  NEEDED               libglib-2.0.so.0
  NEEDED               libgio-2.0.so.0
  NEEDED               libdbus-glib-1.so.2
  NEEDED               libdbus-1.so.3
  NEEDED               libasound.so.2
  NEEDED               libnotify.so.1
  NEEDED               libgpod.so.3
  NEEDED               libpthread.so.0
  NEEDED               libc.so.6
  VERNEED              0x0804d264
  VERNEEDNUM           0x00000003

 Bunun getirisi ne olacak dersek, herşeyden önce yazılımların ilk
açılış süresinde ciddi bir iyileşme bekliyorum. lgili dosyaların
diskten okunması, hafızaya yüklenmesi, objenin init işlemi gibi
işlemler program açılışında değil ihtiyaç olduğunda yapılacak.

 Performans dışında mesela yanlışlıkla ABI kırma vs. olursa da
beraberinde bilmem kaçıncı dereceden direkt olmayan ters bağımlılığı
indirmemek gibi bir güzelliği de olabilir, daha bir kaç farklı yerde
faydasını görebiliriz. Genel olarak çok daha "responsive" bir sistem
elde edeceğiz

 Aslında as-needed ideal bir dünyada olmaması gereken bir flag, sorun
kimlerle linkleneceğini belirleyen yazılımlardan ya da bunları
belirleyen dandik araçlardan (libtool dan siz de nefret ediyorsanız 2
ye basın) kaynaklanıyor. Ancak hepsi düzelene kadar (10 sene diye
tahminde bulunmuşlar bir yerlerde :) bu yöntemle sorunun etrafından
dolaşmak işimize geliyor.

 Kısaca paketlerinize as-needed kullandırın, çok sıkışmadıkca lütfen
kapatmayın :)

-- 
 Onur Küçük                                      Knowledge speaks,
 <onur.--.-.pardus.org.tr>                       but wisdom listens




Gelistirici mesaj listesiyle ilgili daha fazla bilgi