OmniOSの未来

OmniOS-discussメイリングリストのThe Future of OmniOSと題された投稿 によると、OpenSolarisの流れを組むOmniOSについて、開発元のOmniTI社は開発から手を引くことにしたようだ。

個人的には、OpenSolaris/illumosベースのOSを使いたい時には、OmniOSを使って来たので残念だ。 会社としてではなく開発者たちは継続して開発に参加するし、今後はコミュニティーで開発が継続されることを望んでいるようなので、 すぐになくなってしまう訳ではないかもしれない。 しかし、開発の活発さは失われてしまうのかもしれないと思っている。

Vaio S13とサードパーティーのACアダプター

VAIO S13を使う機会があってNetBSD/amd64-currentを動かしてみたが、 ACアダプターについても書いておく。 附属のACアダプターは、Vaio Pro 11やVaio Pro 13、Vaio Pro 13 mk2、Vaio Pro 13 mk3と同様な VJ8AC10V9だった。10.5V 3.8Aと、5.0V 1.0AなUSB電源の 組み合わせである。 であるから、過去の記事と同様に、サードパーティーのACアダプターを使用できた。

NetBSD/amd64-current on Vaio S13

ほんのちょっとの期間ではあるが、Vaio S13を使う機会があったので、NetBSD/amd64 7.99.70を起動させてdmesgを取得してみたので、書いておく。

Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 7.99.70 (GENERIC) #0: Wed Apr 26 11:38:37 UTC 2017
 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC
total memory = 3894 MB
avail memory = 3759 MB
cpu_rng: RDSEED
timecounter: Timecounters tick every 10.000 msec
Kernelized RAIDframe activated
running cgd selftest aes-xts-256 aes-xts-512 done
timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
VAIO Corporation VJS131 (Reserved)
mainbus0 (root)
ACPI: RSDP 0x00000000000F0120 000024 (v02 VAIO  )
ACPI: XSDT 0x00000000B7FD2188 0000DC (v01 Sony   VAIO     20161014 PTEC 00000002)
ACPI: FACP 0x00000000B7FF0000 0000F4 (v05 Sony   VAIO     20161014 PTEC 00000002)
ACPI: DSDT 0x00000000B7FDB000 010598 (v02 VAIO   VAIO     20161014 INTL 20141107)
ACPI: FACS 0x00000000B7F65000 000040
ACPI: TCPA 0x00000000B7FFB000 000032 (v02 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: SLIC 0x00000000B7FFA000 000176 (v01 Sony   VAIO     20161014 PTEC 00000002)
ACPI: SSDT 0x00000000B7FF9000 0004C5 (v02 VAIO   VAIO     20161014 INTL 20141107)
ACPI: SSDT 0x00000000B7FF8000 00004B (v02 VAIO   VAIO     20161014 INTL 20141107)
ACPI: TPM2 0x00000000B7FF7000 000034 (v03 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: UEFI 0x00000000B7F7B000 000042 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: SSDT 0x00000000B7FF1000 0052DE (v02 VAIO   VAIO     20161014 INTL 20141107)
ACPI: HPET 0x00000000B7FEF000 000038 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: LPIT 0x00000000B7FEE000 000094 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: APIC 0x00000000B7FED000 0000BC (v03 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: MCFG 0x00000000B7FEC000 00003C (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: SSDT 0x00000000B7FDA000 0002D4 (v01 VAIO   VAIO     20161014 INTL 20141107)
ACPI: DBGP 0x00000000B7FD9000 000034 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: DBG2 0x00000000B7FD8000 000054 (v00 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: BOOT 0x00000000B7FD7000 000028 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: BATB 0x00000000B7FD6000 000046 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: SSDT 0x00000000B7FD5000 000E73 (v02 VAIO   VAIO     20161014 INTL 20141107)
ACPI: MSDM 0x00000000B7FD4000 000055 (v03 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: FPDT 0x00000000B7FD3000 000044 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: UEFI 0x00000000B7F62000 0001A2 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: SSDT 0x00000000B7FD0000 001450 (v01 VAIO   VAIO     20161014 INTL 20141107)
ACPI: BGRT 0x00000000B7FFC000 000038 (v01 VAIO   VAIO     20161014 PTEC 00000002)
ACPI: Executed 3 blocks of module-level executable AML code
ACPI: Executed 1 blocks of module-level executable AML code
ACPI: 7 ACPI AML tables successfully acquired and loaded
ioapic0 at mainbus0 apid 2: pa 0xfec00000, version 0x20, 120 pins
cpu0 at mainbus0 apid 0
cpu0: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz, id 0x406e3
cpu1 at mainbus0 apid 2
cpu1: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz, id 0x406e3
cpu2 at mainbus0 apid 1
cpu2: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz, id 0x406e3
cpu3 at mainbus0 apid 3
cpu3: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz, id 0x406e3
acpi0 at mainbus0: Intel ACPICA 20170119
acpi0: X/RSDT: OemId <  Sony,    VAIO,20161014>, AslId 
acpi0: MCFG: segment 0, bus 0-255, address 0x00000000e0000000
ACPI: Dynamic OEM Table Load:
ACPI: SSDT 0xFFFFFE8142E51810 00037F (v02 PmRef  Cpu0Cst  00003001 INTL 20141107)
ACPI: Dynamic OEM Table Load:
ACPI: SSDT 0xFFFFFE8106F48810 00061E (v02 PmRef  Cpu0Ist  00003000 INTL 20141107)
ACPI: Dynamic OEM Table Load:
ACPI: SSDT 0xFFFFFE8106FEF810 0005AA (v02 PmRef  ApIst    00003000 INTL 20141107)
ACPI: Dynamic OEM Table Load:
ACPI: SSDT 0xFFFFFE8106EC3150 000119 (v02 PmRef  ApCst    00003000 INTL 20141107)
acpi0: SCI interrupting at int 9
timecounter: Timecounter "ACPI-Safe" frequency 3579545 Hz quality 900
hpet0 at acpi0: high precision event timer (mem 0xfed00000-0xfed00400)
timecounter: Timecounter "hpet0" frequency 24000000 Hz quality 2000
acpiec0 at acpi0 (EC0, PNP0C09): io 0x62,0x66
acpivga0 at acpi0 (GFX0): ACPI Display Adapter
acpiout0 at acpivga0 (DD01, 0x0001): ACPI Display Output Device
acpiout1 at acpivga0 (DD02, 0x0002): ACPI Display Output Device
acpiout2 at acpivga0 (DD03, 0x0003): ACPI Display Output Device
acpiout3 at acpivga0 (DD04, 0x0004): ACPI Display Output Device
acpiout4 at acpivga0 (DD05, 0x0005): ACPI Display Output Device
acpiout5 at acpivga0 (DD06, 0x0006): ACPI Display Output Device
acpiout6 at acpivga0 (DD07, 0x0007): ACPI Display Output Device
acpiout7 at acpivga0 (DD08, 0x0008): ACPI Display Output Device
acpiout8 at acpivga0 (DD09, 0x0009): ACPI Display Output Device
acpiout9 at acpivga0 (DD0A, 0x000a): ACPI Display Output Device
acpiout10 at acpivga0 (DD0B, 0x000b): ACPI Display Output Device
acpiout11 at acpivga0 (DD0C, 0x000c): ACPI Display Output Device
acpiout12 at acpivga0 (DD0D, 0x000d): ACPI Display Output Device
acpiout13 at acpivga0 (DD0E, 0x000e): ACPI Display Output Device
acpiout14 at acpivga0 (DD0F, 0x000f): ACPI Display Output Device
acpiout15 at acpivga0 (DD1F, 0x001f): ACPI Display Output Device
acpiout15: brightness levels: [0-100]
acpivga0: unknown output device acpiout0
acpivga0: unknown output device acpiout1
acpivga0: unknown output device acpiout2
acpivga0: unknown output device acpiout3
acpivga0: unknown output device acpiout4
acpivga0: unknown output device acpiout5
acpivga0: unknown output device acpiout6
acpivga0: unknown output device acpiout7
acpivga0: unknown output device acpiout8
acpivga0: unknown output device acpiout9
acpivga0: unknown output device acpiout10
acpivga0: unknown output device acpiout11
acpivga0: unknown output device acpiout12
acpivga0: unknown output device acpiout13
acpivga0: unknown output device acpiout14
acpivga0: unknown output device acpiout15
acpivga0: connected output devices:
acpivga0:   0x0400: Unknown Output Device, head 0
IOTR (PNP0C02) at acpi0 not configured
FWHD (INT0800) at acpi0 not configured
LDRC (PNP0C02) at acpi0 not configured
attimer1 at acpi0 (TIMR, PNP0100): io 0x40-0x43,0x50-0x53 irq 0
CWDT (INT3F0D) at acpi0 not configured
pckbc1 at acpi0 (PS2K, VAI0002) (kbd port): io 0x60,0x64 irq 1
pckbc2 at acpi0 (PS2M, SYN2714) (aux port): irq 12
PDRC (PNP0C02) at acpi0 not configured
acpibut0 at acpi0 (PWRB, PNP0C0C): ACPI Power Button
acpilid0 at acpi0 (LID0, PNP0C0D): ACPI Lid Switch
acpiacad0 at acpi0 (ACAD, ACPI0003): ACPI AC Adapter
acpibat0 at acpi0 (BAT1, PNP0C0A-1): ACPI Battery
acpibat0: VAIO Corp.  LION rechargeable battery
acpibat0: granularity: low->warn 0.064 Wh, warn->full 0.064 Wh
acpiwmi0 at acpi0 (WMTF, PNP0C14-TBFP): ACPI WMI Interface
acpiwmibus at acpiwmi0 not configured
TPM (MSFT0101) at acpi0 not configured
acpitz0 at acpi0 (THRM)
acpitz0: levels: critical 130.0 C, hot 97.0 C, passive 130.0 C, passive cooling
ACPI: Enabled 5 GPEs in block 00 to 7F
pckbd0 at pckbc1 (kbd slot)
pckbc1: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard
pms0 at pckbc1 (aux slot)
pms0: Synaptics touchpad version 8.1
pms0: Extended W mode, Palm detect, Multi-finger Report, Multi-finger
pckbc1: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pci0 at mainbus0 bus 0: configuration mode 1
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 0 function 0: vendor 8086 product 1904 (rev. 0x08)
vga0 at pci0 dev 2 function 0: vendor 8086 product 1916 (rev. 0x07)
wsdisplay0 at vga0 kbdmux 1: console (80x25, vt100 emulation), using wskbd0
wsmux1: connecting to wsdisplay0
drm at vga0 not configured
xhci0 at pci0 dev 20 function 0: vendor 8086 product 9d2f (rev. 0x21)
xhci0: interrupting at msi0 vec 0
xhci0: xHCI version 1.0
usb0 at xhci0: USB revision 3.0
usb1 at xhci0: USB revision 2.0
vendor 8086 product 9d31 (miscellaneous DASP, revision 0x21) at pci0 dev 20 function 2 not configured
vendor 8086 product 9d3a (miscellaneous communications, revision 0x21) at pci0 dev 22 function 0 not configured
ahcisata0 at pci0 dev 23 function 0: vendor 8086 product 9d03 (rev. 0x21)
ahcisata0: interrupting at ioapic0 pin 16
ahcisata0: 64-bit DMA
ahcisata0: AHCI revision 1.31, 1 port, 32 slots, CAP 0xc734ff00
atabus0 at ahcisata0 channel 2
ppb0 at pci0 dev 28 function 0: vendor 8086 product 9d10 (rev. 0xf1)
ppb0: PCI Express capability version 2  x1 @ 8.0GT/s
pci1 at ppb0 bus 1
pci1: i/o space, memory space enabled
ppb1 at pci0 dev 28 function 1: vendor 8086 product 9d11 (rev. 0xf1)
ppb1: PCI Express capability version 2  x1 @ 8.0GT/s
ppb1: link is x1 @ 2.5GT/s
pci2 at ppb1 bus 2
pci2: i/o space, memory space enabled
iwm0 at pci2 dev 0 function 0: vendor 8086 product 24f3 (rev. 0x3a)
iwm0: interrupting at msi1 vec 0
ppb2 at pci0 dev 28 function 2: vendor 8086 product 9d12 (rev. 0xf1)
ppb2: PCI Express capability version 2  x1 @ 8.0GT/s
ppb2: link is x1 @ 2.5GT/s
pci3 at ppb2 bus 3
pci3: i/o space, memory space enabled
vendor 10ec product 522a (undefined, subclass 0x00, revision 0x01) at pci3 dev 0 function 0 not configured
ppb3 at pci0 dev 28 function 3: vendor 8086 product 9d13 (rev. 0xf1)
ppb3: PCI Express capability version 2  x1 @ 8.0GT/s
ppb3: link is x1 @ 2.5GT/s
pci4 at ppb3 bus 4
pci4: i/o space, memory space enabled
re0 at pci4 dev 0 function 0: RealTek 8168/8111 PCIe Gigabit Ethernet (rev. 0x15)
re0: interrupting at msi2 vec 0
re0: Ethernet address cc:30:80:13:18:6a
re0: using 256 tx descriptors
rgephy0 at re0 phy 7: RTL8251 1000BASE-T media interface, rev. 0
rgephy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT-FDX, auto
pcib0 at pci0 dev 31 function 0: vendor 8086 product 9d48 (rev. 0x21)
vendor 8086 product 9d21 (miscellaneous memory, revision 0x21) at pci0 dev 31 function 2 not configured
hdaudio0 at pci0 dev 31 function 3: HD Audio Controller
hdaudio0: interrupting at msi3 vec 0
hdafg0 at hdaudio0: vendor 10ec product 0233
hdafg0: DAC00 2ch: Speaker [Built-In], HP Out [Jack]
hdafg0: ADC01 2ch: Mic In [Jack]
hdafg0: ADC02 2ch: Mic In [Built-In]
hdafg0: 2ch/2ch 44100Hz 48000Hz 96000Hz 192000Hz PCM16 PCM20 PCM24 AC3
audio0 at hdafg0: full duplex, playback, capture, mmap, independent
hdafg0: Virtual format configured - Format SLINEAR, precision 16, channels 2, frequency 48000
spkr0 at audio0: PC Speaker (synthesized)
hdafg1 at hdaudio0: vendor 8086 product 2809
hdafg1: DP00 8ch: Digital Out [Jack]
hdafg1: 8ch/0ch 48000Hz PCM16*
ichsmb0 at pci0 dev 31 function 4: vendor 8086 product 9d23 (rev. 0x21)
ichsmb0: interrupting at ioapic0 pin 16
iic0 at ichsmb0: I2C bus
isa0 at pcib0
pcppi0 at isa0 port 0x61
spkr1 at pcppi0: PC Speaker
midi0 at pcppi0: PC speaker
sysbeep0 at pcppi0
attimer1: attached to pcppi0
acpicpu0 at cpu0: ACPI CPU
acpicpu0: C1: FFH, lat   1 us, pow  1000 mW
acpicpu0: C2: FFH, lat 151 us, pow   200 mW
acpicpu0: C3: FFH, lat 1034 us, pow   200 mW
acpicpu0: P0: FFH, lat  10 us, pow 15000 mW, 2401 MHz, turbo boost
acpicpu0: P1: FFH, lat  10 us, pow 15000 mW, 2400 MHz
acpicpu0: P2: FFH, lat  10 us, pow 14088 mW, 2300 MHz
acpicpu0: P3: FFH, lat  10 us, pow 12607 mW, 2100 MHz
acpicpu0: P4: FFH, lat  10 us, pow 11888 mW, 2000 MHz
acpicpu0: P5: FFH, lat  10 us, pow 10495 mW, 1800 MHz
acpicpu0: P6: FFH, lat  10 us, pow  9680 mW, 1700 MHz
acpicpu0: P7: FFH, lat  10 us, pow  8372 mW, 1500 MHz
acpicpu0: P8: FFH, lat  10 us, pow  7738 mW, 1400 MHz
acpicpu0: P9: FFH, lat  10 us, pow  7119 mW, 1300 MHz
acpicpu0: P10: FFH, lat  10 us, pow  5789 mW, 1100 MHz
acpicpu0: P11: FFH, lat  10 us, pow  5209 mW, 1000 MHz
acpicpu0: P12: FFH, lat  10 us, pow  4090 mW,  800 MHz
acpicpu0: P13: FFH, lat  10 us, pow  3550 mW,  700 MHz
acpicpu0: P14: FFH, lat  10 us, pow  2386 mW,  500 MHz
acpicpu0: P15: FFH, lat  10 us, pow  1885 mW,  400 MHz
acpicpu0: T0: I/O, lat   1 us, pow     0 mW, 100 %
acpicpu0: T1: I/O, lat   1 us, pow     0 mW,  88 %
acpicpu0: T2: I/O, lat   1 us, pow     0 mW,  76 %
acpicpu0: T3: I/O, lat   1 us, pow     0 mW,  64 %
acpicpu0: T4: I/O, lat   1 us, pow     0 mW,  52 %
acpicpu0: T5: I/O, lat   1 us, pow     0 mW,  40 %
acpicpu0: T6: I/O, lat   1 us, pow     0 mW,  28 %
acpicpu0: T7: I/O, lat   1 us, pow     0 mW,  16 %
coretemp0 at cpu0: thermal sensor, 1 C resolution, Tjmax=100
acpicpu1 at cpu1: ACPI CPU
coretemp1 at cpu1: thermal sensor, 1 C resolution, Tjmax=100
acpicpu2 at cpu2: ACPI CPU
acpicpu3 at cpu3: ACPI CPU
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
timecounter: Timecounter "TSC" frequency 2400599080 Hz quality 3000
uhub0 at usb0: vendor 8086 (0x8086) xHCI Root Hub (0000), class 9/0, rev 1.00/1.00, addr 0
uhub0: 6 ports with 6 removable, self powered
uhub1 at usb1: vendor 8086 (0x8086) xHCI Root Hub (0000), class 9/0, rev 2.00/1.00, addr 0
uhub1: 12 ports with 12 removable, self powered
acpiacad0: AC adapter online.
IPsec: Initialized Security Association Processing.
acpibat0: VAIO Corp.  LION rechargeable battery
acpibat0: granularity: low->warn 0.064 Wh, warn->full 0.064 Wh
ahcisata0 port 2: device present, speed: 6.0Gb/s
wd0 at atabus0 drive 0
wd0: 
wd0: drive supports 16-sector PIO transfers, LBA48 addressing
wd0: 238 GB, 496149 cyl, 16 head, 63 sec, 512 bytes/sect x 500118192 sectors
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 6 (Ultra/133)
wd0(ahcisata0:2:0): using PIO mode 4, DMA mode 2, Ultra-DMA mode 6 (Ultra/133) (using DMA)
umass0 at uhub0 port 1 configuration 1 interface 0
umass0: SanDisk (0x781) Extreme (0x5580), rev 3.00/0.10, addr 1
umass0: using SCSI over Bulk-Only
scsibus0 at umass0: 2 targets, 1 lun per target
sd0 at scsibus0 target 0 lun 0:  disk removable
uvideo0 at uhub1 port 4 configuration 1 interface 0: Chicony Electronics Co.,Ltd. (0x4f2) Front Camera (0xb517), rev 2.01/58.30, addr 2
video0 at uvideo0: Chicony Electronics Co.,Ltd. (0x4f2) Front Camera (0xb517), rev 2.01/58.30, addr 2
sd0(umass0:0:0:0):  Check Condition on CDB: 0x00 00 00 00 00 00
    SENSE KEY:  Not Ready
     ASC/ASCQ:  Logical Unit Is In Process Of Becoming Ready

sd0: drive offline
sd0: fabricating a geometry
sd0: 60075696 trailing sectors not covered by disklabel
ubt0 at uhub1 port 5
ubt0: vendor 8087 (0x8087) product 0a2b (0xa2b), rev 2.00/0.01, addr 3
pad0: outputs: 44100Hz, 16-bit, stereo
audio1 at pad0: half duplex, playback, capture
pad0: Virtual format configured - Format SLINEAR, precision 16, channels 2, frequency 44100
spkr2 at audio1: PC Speaker (synthesized)
sd0: 60075696 trailing sectors not covered by disklabel
sd0: 60075696 trailing sectors not covered by disklabel
sd0: 60075696 trailing sectors not covered by disklabel
sd0: 60075696 trailing sectors not covered by disklabel
WARNING: 16 errors while detecting hardware; check system log.
boot device: sd0
root on sd0a dumps on sd0b
sd0: 60075696 trailing sectors not covered by disklabel
root file system type: ffs
kern.module.path=/stand/amd64/7.99.70/modules
iwm0: hw rev 0x200, fw ver 22.361476.0, address 28:16:ad:1d:21:17
iwm0: 11a rates: 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
iwm0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
iwm0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
acpibat0: normal capacity on 'charge state'

OpenBSD 6.1のリリース

2017年4月11日に OpenBSD 6.1がリリースされていた。

6.0からの変更点のうち、気になったものは以下の通り。

  • arm64プラットフォームで、LLVM/clangがベースのコンパイラーになった
  • armv7プラットフォームで、EABI対応が進んだ
  • loongsonプラットフォームでLoongson 3A CPUとRS780Eチップセットをサポートした
  • armish、sparc、zaurusの各プラットフォームが終了した
  • acpials(4)デバイスドライバーで照度センサーをサポートした
  • acpihve(4)デバイスドライバーでHyper-Vでのエントロピー収集をサポートした
  • hvn(4)デバイスドライバーでHyper-Vネットワークインターフェイスをサポートした
  • iatp(4)デバイスドライバーでAtmel maXTouchタッチパッドとタッチスクリーンをサポートした
  • uwacom(4)デバイスドライバーでWacom USBタブレットをサポートした
  • 最近のApple製ハードウェアでACPI S3サスペンド/レジュームが可能になった
  • vmm(4)/vmd(8)で様々な改良がなされた
  • acme-client(1)が追加された

DragonFly BSD 4.6.2のリリース

DragonFly BSD 4.6.2が2017年4月4日にリリースされていた。

4.6.1からの変更点の内、気になったものは以下の通り。

  • 新しいSynaptics製タッチパッドをサポートした
  • トラックポイントとElantechマウスをサポートした (FreeBSDと同期したようだ)
  • smbfs周りの改善
  • 4.6上での4.6のビルドを修正

QEMU Contribute/SubmitAPatch 2017-03-31

またパッチを投稿したくなったので、最新版を訳しておく。NetBSDサポートも取り込んでもらえるようなので。

http://wiki.qemu-project.org/Contribute/SubmitAPatch

Edition: 12:49, 31 March 2017‎ Huth
Licensed under GNU Free Documentation License 1.2.

貢献/パッチを提出する

QEMUは(バグの修正であれ新しい機能の追加であれ)コードの貢献を歓迎しています。 しかし、私たちはたくさんのパッチを受け取っており、パッチを提出するためのガイドラインを用意しています。 これらに従うことによって、私たちのコードレビューを容易にし、より早くあなたのパッチがコミットされることになります。

このページは非常に長いと思われるかもしれません。 あなたが簡単なパッチを一回だけ送りたいだけであれば、 最低限の要求は以下の通りです。

  • Singed-Off-by:行は必須です。これは「このパッチを投稿するのは法的に問題がなく、 QEMUに含まれて幸せです」と表明することを意味し、必須です。 これはLinuxカーネルのポリシーをモデルにしています。 git commit -sまたはgit format-patch -sで追加できます。
  • 全てのQEMUへの貢献は、qemu-develメーリングリストに「パッチとして送られ」なくてはいけません。パッチの貢献は、バグトラッカーにポストしたり、フォーラムにポストしたり、外部にホストしてそのリンクを送ったりしてはいけません。 (私たちは他のメーリングリストも持っていますが、全てのパッチはqemu-develに送られなくてはなりません。必要に応じて他のメーリングリストにCC:することもできます。) git send-emailを使えば、パッチを壊すことなく配送することができますので、これが最良の方法です(設定のヒント)。 パッチの電子メールへの添付は初回のパッチの提出でどうしようもない時にのみ使うことができます。
  • あなたの電子メールへの返信には、返信をしなくてはいけません。そして、その内容に対応しなくてはいけません。 注意: しかし初回の貢献においては、メンテナーは自分でパッチを修正することがあります。これは、その内容を見て理想的なパッチを提出する方法を学んで欲しいためです。

メーリングリストにポストするのに、購読する必要はありません(メーリングリストのポリシーとして、CCを全て保持し、購読していない人が始めたスレッドに入り続けられるように、全員に返信することになっています)。 購読するならば、配信されてくる電子メールが非常に多いのを覚悟してください。一週間に100通を越えることがよくあります。 メーリングリストはモデレートされています。ある電子メールアドレスからの最初のポストは(購読しているにしろ、していないにしろ)、モデレーターがあなたの電子メールアドレスをホワイトリストに追加するまでしばらく時間がかかります。

大規模な貢献や継続的に貢献を続けるつもりであれば、このページの残りの部分も重要になります。 目次を読むことで、基本的な要求事項の概念を把握することができます。 目次をレファレンスとして使用しつつ、疑問がある部分を読んでください。

ここに目次が入る(この日本語訳では省略)

パッチの書き方

QEMUのコーディングスタイルを使う

私たちのコーディングスタイルに従っているか確認するために、提出する前に、「scripts/checkpatch.pl <パッチファイル>」を実行してください。 特にCプリプロセッサーが絡む場合には、checkpatch.plが絶対正しいと言うことはありません。常識も使ってください。

以下も参照してください。

最新のgit masterに対するパッチにする

QEMUのリリースバージョンに対してのパッチを提出することに意味はありません。開発は進んでおり、そのパッチがmasterに適用できるとは限らないからです。 私たちは、選ばれたバグ修正のみをリリースブランチに適用しており、masterに取り入れられたコードのみをバックポートしています。

長いパッチは分割する

長いパッチは、論理的に正しいコードの変更からなるパッチ連続として分割してください。 それぞれの変更は、コンパイルでき、実行できなくてはなりません。 例えば、1つ目のパッチでMakefileにファイルを追加し、2つ目のパッチでそのファイル自体を追加すると言った形式は認められません(このルールは、後ほどgit bisectのようなツールを使う場合に、あるバグを追っている時に、そのバグ以外の問題でQEMUが動かないと言うことがないようにするためです)。 文書は最初にしてください。最後にしてはいけません。と言うのは、誰かが一連のパッチを読む際に、文書をクリーンルームで評価し、コードと文書が一致しているかを確認することができるようにするためです。 コミットメッセージで「Also, ...」と書かれているのであれば、複数のパッチに分割できると考えてください。 適切に分割されたパッチと、良いコミットメッセージを書くことについてのアドバイスとしては、OpenStackのアドバイスを参照してください。

コードの移動を伴うパッチはレビューしやすくする

一連のパッチが大規模なコードの移動を必要とする場合には、そのリファクタリングのレビューを簡単にするコツがあります。 意味が変わる変更(あるいは、関数の名称変更も)は、本来の別の一つのパッチにし、コードの移動の部分とは分けておきます。 一時的に、git config diff.renames true; git config diff.algorithm patienceを使ってください。 「diff.renames」プロパティーにより、ファイル名変更のパッチは、古いファイルを削除して新しいファイルを追加するのではなく、ファイル名変更に特化したコンパクトな表現になります。 また、「diff.algorithm」プロパティーにより、元のファイルの}の行を別の変更された塊であるとして扱うことにより、連続しない一部分を古いファイルから新しいファイルに移す際に分かりにくさを低減させることができます。

コードの移動のパッチは以下のようにしてレビューに回されるのが理想的です。

git format-patch --stdout -1 > patch;
diff -u <(sed -n 's/^-//p' patch) <(sed -n 's/^\+//p' patch)
これにより、大規模なコードの移動ではない一部の変更に着目することができます。

無関係な変更を含まない

特に伝えておきたいこととして、体裁を整えたり、コーディングスタイルを変更したり、ホワイトスペースの変更を、パッチが変更しないコードについて変更しないでください(あなたの変更しているコードのコーディングスタイルの問題を数行修正するのは問題ありません)。 もし、ある程度の大きさ部分のコードが本当に字下げを変更されたり、大規模なスタイルの修正されたりする必要があるのであれば、意味の変更のない変更として、別のパッチの形で提出してください。

QEMUのあまり変更されない部分についての小さなパッチは、重要ではないパッチのためのプロセスを使うことを検討してください。

意味のあるコミットメッセージを書く

コミットメッセージは意味があるように書かれるべきであり、歴史的な記録として、なぜどのあなたの変更が必要であるか、あるいは、有用かを明示するようにしてください。

QEMUは、一般的なgitのコミットメッセージの標準に従っています。つまり、1行目(これは、電子メールの件名になります)は、「サブシステム: 変更の1行でのまとめ」とします。 「変更の1行でのまとめ」は、大文字で始め、再度には「.(ピリオド)」を付けません。 git shortlog 30を見て、例として件名はどのようになっているか確認してください。 2行目は空行です。3行目からはパッチの詳細についての説明を記載し、空行を挟んで、Signed-off-by:の行を記載します。 コミットメッセージは1行当たり76文字以上にはしないでください。 (git showを80文字幅の端末ウィンドウで表示させたときに 表示が乱れないようにするためです。)

コミットメッセージの本文には、あなたの変更が重要である理由を記載してください。 コメントには、「これはこのバグを修正するものである」に類することは書かないでください(こういう内容は、電子メールの「---」の行以下に記載してください。その部分は最終的なコミットメッセージには含まれません)。 コミットメッセージの本文は、読む人の電子メールクライアントが件名を離して表示させたとしても分かるように、独立した文章にしてください(つまり、「... so that」のように件名から文章が続いているのはいけません)。

パッチを提出する

適切なメンテナーをCCに入れる

パッチはTo:メーリングリストとCC:あなたの修正したファイルのメンテナーで送ってください。 MAINTAINERSファイルで、誰がメンテナーを確認できます。 また、scripts/get_maintainer.plを使うことで、あなたの修正したファイルを最も良く変更しているコミッターが分かります。

例えば、

 ~/src/qemu/scripts/get_maintainer.pl -f hw/ide/core.c

実際には、この作業は自動化できます。 git config sendemail.cccmd 'scripts/get_maintainer.pl --nogit-fallback' のように初回にセットアップしてください。

添付ファイルとして送らない

パッチは本文中に記載し、レビューコメントを返信しやすいようにしてください。添付ファイルとして送ってはいけません。

git format-patchを使う

正しい差分の形式を使ってください。 git format-patchは、正しい形式のパッチを含んだ電子メールを生成します(どのように動くのか文書を確認してください)。 git send-emailでメーリングリストに送る前にカバーレターを変更することができます。 (私たちはgit send-emailを使うことを勧めています。なぜかと言うと、電子メールクライアントは、長い行を折り返したり、空白を削除したりすることがあるからです。 ディストリビューションによっては、send-emailをデフォルトではインストールしていないことがあります。追加でダウンロードしなくてはいけない場合があります。例えば、Fedoraベースのシステムでは、git-emailをインストールします) 一連のパッチにはカバーレターが必要です。カバーレターは、スレッドの浅い部分になくてはなりません(全ての一連のパッチは、カバーレターへの返信であり、パッチ間の返信であってはなりません)。一つの独立したパッチは、カバーレターを必要としません(あえてカバーレターを使う場合には、--numberedを使い、カバーレターとパッチを件名で見分けられるようにしてください)。 パッチは見付けやすいように新しくトップレベルのスレッドで送信してください。他の既存のスレッドに返信して、埋もれさせてはいけません。

パッチの電子メールはSigned-off-by:行を含まなくてはならない

詳しくは、SubmittingPatch 1.12を参照してください。 これは必須であって、これがなければあなたのパッチを受け入れることはできません。 別名や頭文字ではなく、本名を使うようにしてください。

あなたがパッチを書きたら、From:行とSigned-Off-by:行は同じ綴りを使ってください。 メーリングリストに投稿したり、貢献するのに複数の電子メールアドレスを 使うのは問題ありませんが、複数のアドレスを1つのコミットに含めるのは 混乱を生じさせます。 もし、ほかの人が書いたパッチであれは、gitはFrom:行を電子メールの本文に 含めます(あなたのenvelope From:とは異なります)。 これにより正しい作者のクレジットを含めることはできます。 しかし、繰り返しになりますが、作者のSigned-Off-by:行は必須であり、 綴りは一緒でなくてはなりません。

意味のあるカバーレターを含める

これは通常、複数のパッチを一連のものとして貢献する場合に当てはまります。 カバーレターは一連のパッチの全体としてのゴールを説明するものです。

レビュアーはレビューを始めた段階ではあなたのゴールを分かっていません。まだ文脈を十分に共有していないのです。一連のパッチの最後を見るまで、意味のある変更であると理解できないかもしれません。 ゴールが不明確である一覧のパッチは、レビュアーが十分に考えられないため、レビューと修正のサイクルの数を増加させる恐れがあります。 カバーレターがレビュアーにこれらのポイントを説明できれば、プロセスはスムースになり、パッチはより早くマージされます。 カバーレターには一連のパッチを通じてのdiffstatsを含めることで、レビューしようとする人が関心のあるファイルについて知ることができるようにしてください。 あなたの一連のパッチが関心のあるファイルを変更しているかを知る簡単な方法が求められています。

必要であればRFCタグを使う

例えば、「[PATCH RFC v2]」のようにします。 git format-patch --subject-prefix=RFCが便利です。

「RFC」は、「Request For Comments(コメントを希望)」を意味し、あなたのパッチがmasterにそのまま適用されることを意図していないが、レビューして欲しいと言うことを示しています。

このようなことをする理由には以下のようなものがあります:

  • そのパッチが一旦保留されているOSのカーネルの変更に依存しているので、まだQEMUには取り入れて欲しくないが、レビューをする意味はある場合
  • パッチはまだ完成していないが(全ての使用事例を網羅していないとか、全てのターゲットで完了していないとか)、影響の大きいAPIの変更や設計について、先に勧める前にレビューを受けたい場合

この場合、一般的に、レビューされた内容はそのままコミットされないので、以下のようであるのが最良です:

  • 慎重に使用する
  • カバーレターでなぜパッチがRFCなのか、どの分野でレビューして欲しいのか、レビュアーがなぜレビューすべきかのかを明確にする

コードレビューに参加する

全てのQEMUプロジェクトに提出されたパッチは、受け入れられる前に必ずレビューのプロセスを通過します。 良くメンテナンスされている分野のコードは、速やかにレビューされますが、あまりメンテナンスされていない分野では遅れがちです。

コードレビューで発覚した問題を修正し続ける

そのままでQEMUに取り込まれるパッチは多くはありません。開発者がバグを発見したり、より明確なアプローチを示唆されたり、コードスタイルの問題を指摘されたり、コミットメッセージの誤字脱字を指摘されると言ったとこてぁ、極めてよくあることです。 あなたは、このような指摘に応える必要があります。そして、問題を修正した第2版のパッチを送る必要があります。 これは、あなたの側の時間と苦労を伴いますが、これをしなくては、QEMUにあなたの変更が取り込まれることは決してありません。 これは、礼儀正しくあるということでもあります。あなたのコードをレビューし、改善を示唆するのに時間を費した開発者は、あなたがそれ以上に何かをしないのであれば、時間を浪費したと言うことになり、たいへんがっかりさせられます。

あなたのパッチへのコメントに返信する際には、全員に返信し送信者のみに返信しないようにしてください。全ての議論をメーリングリストに残しておくことで、全員がその内容を参照することができます。

レビューコメントに注意を払う

誰かがその時間をあなたのコードを。レビューするのに使ってくれたのです。その努力には敬意を払うべきです。以前にもらったレビューの内容を反映させることなく一連のパッチを投稿し続けることは、レビュアーを遠退かせ、あなたのパッチが行き詰まることを意味します。 レビュアーは常に完璧であるとは限りません。ですので、レビュアーによる要求を全て盲目的に受け入れるのではなく、あなたのコードが正しいと主張することができます。 一方で、誰かがレビューの過程であなたのコードに潜んでいる問題を指摘したが、結局あなたのコードが正しかったとします。そのような場合には、コミットメッセージや。コメントを修正し、なぜあなたのコードが正しいか説明するようにしてください。

もしレビューの過程で浮かび上がった問題を修正したら、それを修正した1つのパッチを投稿するのではなく、一連の全てのパッチを再送信するようにしてください。 これによりメンテナーは手動でどのパッチが適切であるかを判別することなく、簡単に修正された一連のパッチを適用させることができます。 新しいバージョンは完全に新しい電子メールあるいは一連の電子メールで送ってください。バージョン1に返信しようとするのは止めてください(こうすることにより、自動化されたパッチ電子メール取り扱いツールがv1とv2の電子メールを判別できるのを助けます)。

パッチを再送信する場合にはバージョンタグを付加する

最初のバージョン以外の全てのパッチはバージョンタグを含む必要があります。例えば、「[PATCH v2]」のようにします。 これにより、誰もが最新バージョンを簡単に見分けることができるようになります。 (最初のバージョンは「v1」を付ける必要はありません。「[PATCH]」で十分です。) 一連のパッチにおいては、バージョンは一連のパッチの全てに付加される必要があります。一つのパッチのみが変更されたとしても、全てのパッチに「v2」を付加して再送信する必要があります。 1つの一連のパッチで違ったバージョンを付けようとしないでください。 git format-patchとgit send-emailのいずれも-v2オプションを使うことで、これらを簡単に実施することができます。 新しいバージョンをそれぞれ新しいトップレベルのスレッドとして送信してください。以前のバージョンに返信して、埋もれさせてはいけません。多くのレビュアーがスレッドに深く潜らないと新しいパッチを見付けられないようではいけません。

パッチ間の履歴を含める

第2版以降のパッチには、以前のバージョンからの変更のまとめを含めるようにしてください。しかし、コミットメッセージに含めてはいけません。 パッチの電子メールにおいて、「---」の行より上のみがコミットメッセージになりますので、ここのみがコミットされた再にgitの変更履歴となります。 この部分は、このバージョンのパッチが何をしているのかと言う自己完結的な説明でなくてはなりません。6カ月後に見直しても誰もが分かるように書かれなくてはなりません。 「---」の下でパッチ自体の上の行は、(git format-patchはdiffstatをここに挿入しますが)パッチを読んでくれる人に向けての意見を記載するのに良い場所です。「以前のバージョンからの変更点」はここに記載します。 git-publishスクリプトは、各バージョン間のまとめを追うのに便利です。 また、git-backport-diffスクリプトは、バージョン間の変更に着目しているレビュアーに役立ちます。

コツ

Reviewed-by:タグを適切に使うことでレビューを助ける

長い一連のパッチをレビューする時、レビュアーはいくつかのパッチにReviewed-byタグを付けて返信することができます。これは、そのパッチは独立して扱って良いことを示します(ホワイトスペースの変更のようなコードの文脈に影響しない重要でないクリーンアップなど)。 そのような返信を受け取ったら、Reviewed-byタグを手動でコミットメッセージに含め、パッチを次のバージョンにし、レビュアーがどのパッチは既にレビュー済みであるかが分かるようにします。

逆に、以前にレビューを受けたパッチを大幅に変更した場合には、Reviewed-byタグをコミットメッセージから削除し、以前のバージョンからの変更点を記載します。これによって、あなたの変更にレビュアーが注意を簡単に払えるようにします。

あなたのパッチが無視されているような場合

もしあなたのパッチが何の返信ももらえない場合には1から2週間後に「ping」を送るべきです。これは、パッチの電子メールに返信して電子メールを送ることによって行ないます。内容は、「ping」とパッチへのpatchworkまたはGMANEのページへのリンクです。 なぜ無視されているのかを再度見直すのも大切です(メンテナーをCCに入れていないとか、以前のバージョンのレビューコメントに返信していないとか)。ですが、あまりメンテナンスされていない分野では、単に見過されている可能性があります。 pingしても無視されたら、1週間後に再度pingします。 あなたは、あなたのパッチが適用されることに対して最もやる気のある人です。粘り強くなくてはなりません。

私のパッチが適用される時

メーリングリストであなたのパッチが十分にレビューされた後、その分野のメンテナーはメーリングリストにあなたのパッチが特定の準備用のブランチに適用した旨の連絡をします。 定期的に、メンテナーはqemu mainlineにトピックブランチを集約するためのプルリクエストを送ります。 あなたがある分野のコードのメンテナーになるまで、プルリクエストを送る必要はありません。 メンテナーは、あなたのコミットをさらに変更することがあります。単純なマージ時の競合を解決するものである場合や、レビュー中に指摘された重要でない誤字脱字の修正をする場合がありますが、Signed-off-by行があなたの行に追加されます。そのメンテナーのツリーを通じて取り入れられたことを示すためです。 メンテナーのプルリクエストが難しいマージ時の競合に遭遇することがあります。このような場合には、リベースト問題の解決を手助けして欲しいと依頼されるかもしれません。 あなたのパッチが最初に良い返事をもらってからqemu.gitに含まれるようになるまで、数週間は必要かもしれません。リリースサイクルフリーズに期間に重なると、もっと長くかかるでしょう。

敬意を返す

ピアレビューは全ての人がレビューに時間を割く場合のみ成立します。 もし全員が自分のレビューするよりも多くのパッチを提出するとしたら、パッチは停滞します。 良いゴールは、自分が提出したのと同じ数だけ他の人のパッチをレビューすると言うことです。 メンテナーほどコードベースに詳しくないからと言って心配しないでください。あなたがコードにあまり親しんでいなことにより、レビューが弱いと言うのは、完全に許されています。

plgarc/wip/llama.cppでpkgsrcのBLASサポートを探る

この記事は、 NetBSD Advent Calendar 2024 の13日目の記事です。 llama.cppを使ってみる 以前に、 NetBSD/amd64でllama.cppを使ってみる という記事で llama.cpp を使ってみていました。 あれか...